#include <bits/stdc++.h>
using namespace std;
int b, c, n, q;
class data {
 public:
  int s4, s7, s47, s74;
  bool swp;
};
data St[4 * (int)(1e6 + 10)];
string a;
char str[(int)(1e6 + 10)];
data merge(data x, data y) {
  data t;
  t.s4 = x.s4 + y.s4;
  t.s7 = x.s7 + y.s7;
  t.s47 = max(x.s47 + y.s7, x.s4 + y.s47);
  t.s74 = max(x.s74 + y.s4, x.s7 + y.s74);
  return t;
}
void push(int v, int sol, int sag) {
  if (St[v].swp) {
    St[sol].swp ^= 1;
    St[sag].swp ^= 1;
    swap(St[sol].s4, St[sol].s7);
    swap(St[sag].s4, St[sag].s7);
    swap(St[sol].s47, St[sol].s74);
    swap(St[sag].s47, St[sag].s74);
    St[v].swp = 0;
  }
}
data init(int v, int sol, int sag) {
  if (sol == sag)
    return St[v] = (data){str[sol] == '4', str[sol] == '7', 1, 1, 0};
  return St[v] = merge(init(2 * v, sol, ((sol + sag) / 2)),
                       init(2 * v + 1, ((sol + sag) / 2) + 1, sag));
}
data upd(int v, int sol, int sag, int x, int y) {
  if (sag < x or y < sol) return St[v];
  if (x <= sol and sag <= y) {
    St[v].swp ^= 1;
    swap(St[v].s4, St[v].s7);
    swap(St[v].s47, St[v].s74);
    return St[v];
  }
  push(v, 2 * v, 2 * v + 1);
  return St[v] = merge(upd(2 * v, sol, ((sol + sag) / 2), x, y),
                       upd(2 * v + 1, ((sol + sag) / 2) + 1, sag, x, y));
}
int main() {
  cin >> n >> q;
  scanf("%s", str + 1);
  init(1, 1, n);
  for (int i = 1; i <= q; i++) {
    cin >> a;
    if (a == "count")
      printf("%d\n", St[1].s47);
    else {
      scanf("%d %d", &b, &c);
      upd(1, 1, n, b, c);
    }
  }
}
