#include <bits/stdc++.h>
using namespace std;
struct node {
  node *l, *r;
  int num[2], ma[2];
  bool barax;
  void mak(int p, int q) {
    barax = false;
    l = r = NULL;
    num[1] = ma[1] = ma[0] = num[0] = 0;
    if (p == q - 1) {
      ma[1] = ma[0] = num[0] = 1;
      return;
    } else {
      l = new node;
      r = new node;
      int mid = (p + q) / 2;
      l->mak(p, mid);
      r->mak(mid, q);
      num[0] = l->num[0] + r->num[0];
      num[1] = l->num[1] + r->num[1];
      ma[0] = max(l->ma[0] + r->num[1], r->ma[0] + l->num[0]);
      ma[1] = max(l->ma[1] + r->num[0], r->ma[1] + l->num[1]);
    }
  }
  void update(int p, int q, int b, int e) {
    if (p == b && q == e) {
      swap(num[0], num[1]);
      swap(ma[0], ma[1]);
      barax = !barax;
      return;
    }
    int mid = (p + q) / 2;
    if (barax) {
      swap(l->num[0], l->num[1]);
      swap(l->ma[0], l->ma[1]);
      l->barax = !l->barax;
      swap(r->num[0], r->num[1]);
      swap(r->ma[0], r->ma[1]);
      r->barax = !r->barax;
      barax = false;
    }
    if (b >= mid) {
      r->update(mid, q, b, e);
    } else {
      if (e <= mid)
        l->update(p, mid, b, e);
      else {
        l->update(p, mid, b, mid);
        r->update(mid, q, mid, e);
      }
    }
    num[0] = l->num[0] + r->num[0];
    num[1] = l->num[1] + r->num[1];
    ma[0] = max(l->ma[0] + r->num[1], r->ma[0] + l->num[0]);
    ma[1] = max(l->ma[1] + r->num[0], r->ma[1] + l->num[1]);
  }
} root;
int n, m;
string ss;
int main() {
  cin >> n >> m;
  int t1, t2;
  cin >> ss;
  root.mak(0, n);
  for (int i = 0; i < n; ++i)
    if (ss[i] == '7') root.update(0, n, i, i + 1);
  for (int i = 0; i < m; ++i) {
    cin >> ss;
    if (ss == "count")
      cout << root.ma[0] << endl;
    else {
      cin >> t1 >> t2;
      t1--;
      root.update(0, n, t1, t2);
    }
  }
  return 0;
}
