#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;       }     }   }   