#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 3e5 + 5;
int bit[maxn], ans[maxn], ok[maxn];
void add(int p, int v){
for (; p < maxn; p += p & -p) bit[p] += v;
}
int get(int p){
int res = 0;
for (; p; p -= p & -p) res += bit[p];
return res;
}
struct node{
int x, y, val, id;
};
vector<node> qry, tmp;
void cdq(int l, int r) {
int mid = (l + r) / 2;
if(l < mid) cdq(l, mid);
if(mid + 1 < r) cdq(mid + 1, r);
int i = l, j = mid + 1, k = l;
while(i <= mid && j <= r){
if(qry[i].x <= qry[j].x){
if(qry[i].id == 1) add(qry[i].y, qry[i].val);
tmp[k++] = qry[i++];
}else{
if(qry[j].id < 0) ans[-qry[j].id] += get(maxn - 1) - get(qry[j].y - 1);
tmp[k++] = qry[j++];
}
}
while(i <= mid){
if(qry[i].id == 1) add(qry[i].y, qry[i].val);
tmp[k++] = qry[i++];
}
while(j <= r) {
if(qry[j].id < 0) ans[-qry[j].id] += get(maxn - 1) - get(qry[j].y - 1);
tmp[k++] = qry[j++];
}
for(int p = l; p <= mid; p++) if(qry[p].id == 1) add(qry[p].y, -qry[p].val);
for(int p = l; p <= r; p++) qry[p] = tmp[p];
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, q; cin >> n >> q;
string t; cin >> t;
set<int> s;
s.insert(0);
s.insert(n + 1);
for(int i = 1; i <= n; i++){
if(t[i - 1] == '0') s.insert(i);
}
int last = 0;
for(int x: s){
if(x - last > 1) qry.push_back({last + 1, x - 1, -0, 1}); //các đoạn liên tiếp số 1
last = x;
}
for(int i = 1; i <= q; i++){
string type; cin >> type;
if(type == "toggle"){
int x; cin >> x;
if(t[x - 1] == '0'){
t[x - 1] = '1';
auto it = s.find(x);
int l = *prev(it), r = *next(it);
if(x - l > 1) qry.push_back({l + 1, x - 1, i, 1});
if(r - x > 1) qry.push_back({x + 1, r - 1, i, 1});
qry.push_back({l + 1, r - 1, -i, 1});
s.erase(it);
}else{
t[x - 1] = '0';
s.insert(x);
auto it = s.find(x);
int l = *prev(it), r = *next(it);
qry.push_back({l + 1, r - 1, i, 1});
if(x - l > 1) qry.push_back({l + 1, x - 1, -i, 1});
if(r - x > 1) qry.push_back({x + 1, r - 1, -i, 1});
}
}else{
int a, b; cin >> a >> b;
if(*s.lower_bound(a) > b - 1) ans[i] += i;
qry.push_back({a, b - 1, 0, -i});
ok[i] = 1;
}
}
tmp.resize(qry.size());
cdq(0, qry.size() - 1);
for(int i = 1; i <= q; i++){
if(ok[i]) cout << ans[i] << "\n";
}
}