#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> segT;
vector<int> lazy;
long long n, m, l, r;
string s;
void buildT(int ss, int se, int si) {
  if (ss == se) {
    if (s[ss] == '4')
      segT[si][0] = 1;
    else
      segT[si][1] = 1;
    segT[si][2] = 1;
    segT[si][3] = 1;
    return;
  }
  int mid = (ss + se) / 2;
  buildT(ss, mid, 2 * si + 1);
  buildT(mid + 1, se, 2 * si + 2);
  segT[si][0] = segT[2 * si + 1][0] + segT[2 * si + 2][0];
  segT[si][1] = segT[2 * si + 1][1] + segT[2 * si + 2][1];
  segT[si][2] = max(segT[2 * si + 1][2] + segT[2 * si + 2][1],
                    segT[2 * si + 1][0] + segT[2 * si + 2][2]);
  segT[si][3] = max(segT[2 * si + 1][3] + segT[2 * si + 2][0],
                    segT[2 * si + 1][1] + segT[2 * si + 2][3]);
}
void upd(int ss, int se, int si) {
  if (lazy[si] == 1) {
    swap(segT[si][0], segT[si][1]);
    swap(segT[si][2], segT[si][3]);
    if (ss != se) {
      lazy[2 * si + 1] ^= 1;
      lazy[2 * si + 2] ^= 1;
    }
    lazy[si] = 0;
  }
  if (r < ss || l > se) return;
  if (ss >= l && se <= r) {
    swap(segT[si][0], segT[si][1]);
    swap(segT[si][2], segT[si][3]);
    if (ss != se) {
      lazy[2 * si + 1] ^= 1;
      lazy[2 * si + 2] ^= 1;
    }
    return;
  }
  int mid = (ss + se) / 2;
  upd(ss, mid, 2 * si + 1);
  upd(mid + 1, se, 2 * si + 2);
  segT[si][0] = segT[2 * si + 1][0] + segT[2 * si + 2][0];
  segT[si][1] = segT[2 * si + 1][1] + segT[2 * si + 2][1];
  segT[si][2] = max(segT[2 * si + 1][2] + segT[2 * si + 2][1],
                    segT[2 * si + 1][0] + segT[2 * si + 2][2]);
  segT[si][3] = max(segT[2 * si + 1][3] + segT[2 * si + 2][0],
                    segT[2 * si + 1][1] + segT[2 * si + 2][3]);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int i, j;
  cin >> n >> m;
  cin >> s;
  long long lim = 2 * pow(2, ceil(log(n) / log(2.0))) + 2;
  vector<int> temp(lim, 0);
  vector<vector<int>> temp2(lim, vector<int>(4, 0));
  segT = temp2;
  lazy = temp;
  buildT(0, n - 1, 0);
  string typ;
  for (i = 0; i < m; i++) {
    cin >> typ;
    if (typ.compare("switch") == 0) {
      cin >> l >> r;
      l -= 1;
      r -= 1;
      upd(0, n - 1, 0);
    } else {
      if (lazy[0] == 1)
        cout << segT[0][3] << endl;
      else
        cout << segT[0][2] << endl;
    }
  }
}
