#include <iostream>
#include <random>
#include <chrono>
using namespace std;
const int N = 1<<19;
string t[N], S[N], s;
int l[N], r[N], Sz, Sum[N<<1], Lz[N<<1], L[N], R[N];
vector<pair<int,int>> vec[N];
vector<int> tgl[N], Mid[N];
void sub1(int n, int q){
S[0] = s;
for (int i=1;i<=q;i++){
S[i] = S[i-1];
if (t[i][0] == 'q'){
int ans = 0;
for (int j=0;j<i;j++){
bool T = 1;
for (int k=l[i];k<r[i];k++)
T &= S[j][k-1] - '0';
ans += T;
// cout<<l[i]<<' '<<r[i]<<' '<<S[j]<<' '<<T<<endl;
}
cout<<ans<<'\n';
}
else
S[i][l[i]-1] ^= 1;
}
}
void sub2(int n, int q){
for (int i=1;i<=n;i++){
if (s[i-1] == '1')
vec[i].push_back({0, 0});
}
for (int i=1;i<=q;i++){
if (t[i][0] == 't')
vec[l[i]].push_back({0, i});
else
vec[l[i]].push_back({1, i});
}
vector<int> ans(q);
for (int i=1;i<=n;i++){
int lst = 0, st = 0, Ans = 0;
for (auto [tp, T] : vec[i]){
if (tp == 0){
if (st == 1)
Ans += T - lst;
st ^= 1;
lst = T;
}
else
ans[T-1] = Ans + st * (T - lst);
}
}
for (int i=1;i<=q;i++){
if (t[i][0] == 'q')
cout<<ans[i-1]<<'\n';
}
}
void Push(int cur, int lc, int rc, int sz){
Sum[lc] += Lz[cur] * sz, Lz[lc] += Lz[cur];
Sum[rc] += Lz[cur] * sz, Lz[rc] += Lz[cur];
Lz[cur] = 0;
}
void Add(int i, int v){
for (i += N; i; i /= 2)
Sum[i] += v;
}
int get(int l, int r, int ans = 0){
for (l += N - 1, r += N; l + 1 < r; l /= 2, r /= 2){
if (!(l & 1))
ans += Sum[l ^ 1];
if (r & 1)
ans += Sum[r ^ 1];
}
return ans;
}
signed main(){
int n, q;
cin>>n>>q>>s;
for (int i=1;i<=q;i++){
cin>>t[i]>>l[i];
if (t[i][0] == 'q'){
cin>>r[i];
Sz |= r[i] - l[i];
}
}
if (n <= 200 and q <= 200){
sub1(n, q);
return 0;
}
if (Sz == 1){
sub2(n, q);
return 0;
}
for (int i=0;i<n;i++){
if (s[i] == '1')
tgl[0].push_back(i+1);
s[i] = '0';
}
for (int i=1;i<=q;i++){
if (t[i][0] == 't')
tgl[i].push_back(l[i]);
}
for (int i=1;i<=q;i++){
if (t[i][0] != 'q')
continue;
L[i] = -1, R[i] = i;
Mid[(L[i] + R[i]) / 2].push_back(i);
}
for (int j=0;j<20;j++){
for (int i=0;i<N+N;i++)
Sum[i] = Lz[i] = 0;
string ss = '0' + s;
for (int i=0;i<=q;i++){
for (int k : tgl[i]){
if (ss[k] == '1')
Add(k, -1);
else
Add(k, 1);
ss[k] ^= 1;
}
for (int j : Mid[i]){
if (get(l[j], r[j]) < r[j] - l[j])
L[j] = i;
else
R[j] = i;
}
vector<int> ().swap(Mid[i]);
}
for (int i=1;i<=q;i++){
if (t[i][0] == 'q' and L[i] + 1 < R[i])
Mid[(L[i] + R[i])/2].push_back(i);
}
}
for (int i=1;i<=q;i++)
if (t[i][0] == 'q')
cout<<i - R[i]<<'\n';
}