#include <bits/stdc++.h>
using namespace std;
const int N = 1000001;
char s[N];
int n, m;
int t[N << 2][2][2], f[N << 2];
int max(int a, int b) { return a > b ? a : b; }
int max(int a, int b, int c) { return max(a, b) > c ? max(a, b) : c; }
void pushup(int k) {
  t[k][0][0] = t[k << 1][0][0] + t[k << 1 | 1][0][0];
  ;
  t[k][0][1] = max(t[k << 1][0][0] + t[k << 1 | 1][0][1],
                   t[k << 1][0][0] + t[k << 1 | 1][1][1],
                   t[k << 1][0][1] + t[k << 1 | 1][1][1]);
  t[k][1][0] = max(t[k << 1][1][1] + t[k << 1 | 1][1][0],
                   t[k << 1][1][1] + t[k << 1 | 1][0][0],
                   t[k << 1][1][0] + t[k << 1 | 1][0][0]);
  t[k][1][1] = t[k << 1][1][1] + t[k << 1 | 1][1][1];
}
void pushdown(int k) {
  if (f[k]) {
    f[k << 1] ^= 1, f[k << 1 | 1] ^= 1;
    swap(t[k << 1][0][0], t[k << 1][1][1]);
    swap(t[k << 1][0][1], t[k << 1][1][0]);
    swap(t[k << 1 | 1][0][0], t[k << 1 | 1][1][1]);
    swap(t[k << 1 | 1][0][1], t[k << 1 | 1][1][0]);
    f[k] = 0;
  }
}
void build(int L, int R, int k) {
  if (L == R) {
    int r = s[L - 1] == '7';
    t[k][r][r] = 1;
  } else {
    int mid = (L + R) >> 1;
    build(L, mid, k << 1);
    build(mid + 1, R, k << 1 | 1);
    pushup(k);
  }
}
void update(int L, int R, int l, int r, int k) {
  if (l <= L && r >= R) {
    swap(t[k][0][0], t[k][1][1]);
    swap(t[k][0][1], t[k][1][0]);
    f[k] ^= 1;
  } else {
    int mid = (L + R) >> 1;
    pushdown(k);
    if (l <= mid) update(L, mid, l, r, k << 1);
    if (r > mid) update(mid + 1, R, l, r, k << 1 | 1);
    pushup(k);
  }
}
int main() {
  int l, r;
  char op[10];
  scanf("%d%d%s", &n, &m, s);
  build(1, n, 1);
  while (m--) {
    scanf("%s", op);
    if (op[0] == 'c')
      printf("%d\n", max(t[1][0][0], t[1][0][1], t[1][1][1]));
    else {
      scanf("%d%d", &l, &r);
      update(1, n, l, r, 1);
    }
  }
  return 0;
}
