#include <bits/stdc++.h>
using namespace std;
struct stnode {
  long long f4;
  long long f7;
  long long ans;
  long long a;
};
stnode st[4000005];
string s;
long long lazy[4000005];
void merge(stnode &f, stnode &n1, stnode &n2) {
  f.f4 = n1.f4 + n2.f4;
  f.f7 = n1.f7 + n2.f7;
  f.ans = max(n1.ans + n2.f7, n1.f4 + n2.ans);
  f.a = max(n1.a + n2.f4, n1.f7 + n2.a);
}
void build(long long node, long long l, long long r) {
  lazy[node] = 0;
  if (l == r) {
    if (s[l - 1] == '4')
      st[node].f4 = 1, st[node].f7 = 0;
    else
      st[node].f7 = 1, st[node].f4 = 0;
    st[node].ans = 1;
    st[node].a = 1;
    return;
  }
  long long m = (l + r) / 2;
  build(2 * node, l, m);
  build(2 * node + 1, m + 1, r);
  merge(st[node], st[2 * node], st[2 * node + 1]);
}
void propogate(long long node, long long l, long long r) {
  st[node].f4 = st[node].f7;
  st[node].f7 = r - l + 1 - st[node].f7;
  long long x = st[node].a;
  st[node].a = st[node].ans;
  st[node].ans = x;
  if (l != r) {
    lazy[node * 2] ^= 1;
    lazy[2 * node + 1] ^= 1;
  }
  lazy[node] = 0;
}
void update(long long node, long long l, long long r, long long tl,
            long long tr) {
  if (lazy[node]) propogate(node, l, r);
  if (r < tl || l > tr) return;
  if (l >= tl && r <= tr) {
    lazy[node]++;
    propogate(node, l, r);
    return;
  }
  long long mid = (l + r) / 2;
  update(2 * node, l, mid, tl, tr);
  update(2 * node + 1, mid + 1, r, tl, tr);
  merge(st[node], st[2 * node], st[2 * node + 1]);
}
stnode query(long long node, long long L, long long R, long long i,
             long long j) {
  if (lazy[node]) propogate(node, L, R);
  if (j < L || i > R) return stnode();
  if (i <= L && R <= j) return st[node];
  long long M = (L + R) / 2;
  stnode left = query(node * 2, L, M, i, j);
  stnode right = query(node * 2 + 1, M + 1, R, i, j);
  stnode cur;
  merge(cur, left, right);
  return cur;
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long n, q;
  cin >> n >> q;
  cin >> s;
  long long i;
  build(1, 1, n);
  for (i = 0; i < q; i++) {
    string s1;
    cin >> s1;
    if (s1[0] == 's') {
      long long l, r;
      cin >> l >> r;
      update(1, 1, n, l, r);
    } else {
      cout << query(1, 1, n, 1, n).ans << "\n";
    }
  }
}
