#include <bits/stdc++.h>
using namespace std;
long long int powmod(long long int a, int b, int n) {
  long long int rm = 1;
  while (b) {
    if (b % 2) {
      rm = (rm * a) % n;
    }
    a = (a * a) % n;
    b /= 2;
  }
  return rm;
}
int seg[4 * int(1e6 + 10)][3][2] = {0}, n, m, layer[4 * int(1e6 + 10)] = {0};
char s[int(1e6 + 10)];
void insert(int n, int it, int f) {
  if (it == f) {
    seg[n][1][1] = seg[n][0][0] = (s[f - 1] == '4');
    seg[n][0][1] = seg[n][1][0] = !seg[n][0][0];
    seg[n][2][1] = seg[n][2][0] = 1;
    return;
  }
  int m = (it + f) / 2;
  insert(n * 2, it, m);
  insert(n * 2 + 1, m + 1, f);
  seg[n][0][0] = seg[n * 2][0][0] + seg[n * 2 + 1][0][0];
  seg[n][1][0] = seg[n * 2][1][0] + seg[n * 2 + 1][1][0];
  seg[n][2][0] = max(seg[n * 2][0][0] + seg[n * 2 + 1][2][0],
                     seg[n * 2][2][0] + seg[n * 2 + 1][1][0]);
  seg[n][0][1] = seg[n * 2][0][1] + seg[n * 2 + 1][0][1];
  seg[n][1][1] = seg[n * 2][1][1] + seg[n * 2 + 1][1][1];
  seg[n][2][1] = max(seg[n * 2][0][1] + seg[n * 2 + 1][2][1],
                     seg[n * 2][2][1] + seg[n * 2 + 1][1][1]);
}
void update(int n, int it, int f, int q1, int q2) {
  if (it == f) {
    layer[n]++;
    if (layer[n] % 2) {
      seg[n][1][1] = seg[n][0][0] = !(s[f - 1] == '4');
      seg[n][0][1] = seg[n][1][0] = !seg[n][0][0];
      seg[n][2][1] = seg[n][2][0] = 1;
    } else {
      seg[n][1][1] = seg[n][0][0] = (s[f - 1] == '4');
      seg[n][0][1] = seg[n][1][0] = !seg[n][0][0];
      seg[n][2][1] = seg[n][2][0] = 1;
    }
    return;
  }
  if (q1 == it && f == q2) {
    layer[n]++;
    if (layer[n] % 2 == 1) {
      seg[n][0][0] = seg[n * 2][0][1] + seg[n * 2 + 1][0][1];
      seg[n][1][0] = seg[n * 2][1][1] + seg[n * 2 + 1][1][1];
      seg[n][2][0] = max(seg[n * 2][0][1] + seg[n * 2 + 1][2][1],
                         seg[n * 2][2][1] + seg[n * 2 + 1][1][1]);
      seg[n][0][1] = seg[n * 2][0][0] + seg[n * 2 + 1][0][0];
      seg[n][1][1] = seg[n * 2][1][0] + seg[n * 2 + 1][1][0];
      seg[n][2][1] = max(seg[n * 2][0][0] + seg[n * 2 + 1][2][0],
                         seg[n * 2][2][0] + seg[n * 2 + 1][1][0]);
    } else {
      seg[n][0][0] = seg[n * 2][0][0] + seg[n * 2 + 1][0][0];
      seg[n][1][0] = seg[n * 2][1][0] + seg[n * 2 + 1][1][0];
      seg[n][2][0] = max(seg[n * 2][0][0] + seg[n * 2 + 1][2][0],
                         seg[n * 2][2][0] + seg[n * 2 + 1][1][0]);
      seg[n][0][1] = seg[n * 2][0][1] + seg[n * 2 + 1][0][1];
      seg[n][1][1] = seg[n * 2][1][1] + seg[n * 2 + 1][1][1];
      seg[n][2][1] = max(seg[n * 2][0][1] + seg[n * 2 + 1][2][1],
                         seg[n * 2][2][1] + seg[n * 2 + 1][1][1]);
    }
    return;
  }
  int m = (it + f) / 2;
  if (q2 <= m)
    update(n * 2, it, m, q1, q2);
  else if (q1 > m)
    update(n * 2 + 1, m + 1, f, q1, q2);
  else {
    update(n * 2, it, m, q1, m);
    update(n * 2 + 1, m + 1, f, m + 1, q2);
  }
  if (layer[n] % 2 == 0) {
    seg[n][0][0] = seg[n * 2][0][0] + seg[n * 2 + 1][0][0];
    seg[n][1][0] = seg[n * 2][1][0] + seg[n * 2 + 1][1][0];
    seg[n][2][0] = max(seg[n * 2][0][0] + seg[n * 2 + 1][2][0],
                       seg[n * 2][2][0] + seg[n * 2 + 1][1][0]);
    seg[n][0][1] = seg[n * 2][0][1] + seg[n * 2 + 1][0][1];
    seg[n][1][1] = seg[n * 2][1][1] + seg[n * 2 + 1][1][1];
    seg[n][2][1] = max(seg[n * 2][0][1] + seg[n * 2 + 1][2][1],
                       seg[n * 2][2][1] + seg[n * 2 + 1][1][1]);
  } else {
    seg[n][0][0] = seg[n * 2][0][1] + seg[n * 2 + 1][0][1];
    seg[n][1][0] = seg[n * 2][1][1] + seg[n * 2 + 1][1][1];
    seg[n][2][0] = max(seg[n * 2][0][1] + seg[n * 2 + 1][2][1],
                       seg[n * 2][2][1] + seg[n * 2 + 1][1][1]);
    seg[n][0][1] = seg[n * 2][0][0] + seg[n * 2 + 1][0][0];
    seg[n][1][1] = seg[n * 2][1][0] + seg[n * 2 + 1][1][0];
    seg[n][2][1] = max(seg[n * 2][0][0] + seg[n * 2 + 1][2][0],
                       seg[n * 2][2][0] + seg[n * 2 + 1][1][0]);
  }
}
char qstr[int(1e6 + 10)];
int main() {
  int l, r;
  cin >> n >> m;
  scanf("%s", s);
  insert(1, 1, n);
  for (int i = 1; i <= m; ++i) {
    scanf("%s", qstr);
    if (qstr[0] == 'c') {
      printf("%d\n", seg[1][2][0]);
    } else {
      scanf("%d%d", &l, &r);
      update(1, 1, n, l, r);
    }
  }
  return 0;
}
