#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9;
const int N = 3e5 + 10;
int n, q;
string s;
int total[N], start[N];
struct SegmentTree {
int t[N * 4];
void init() {
for (int i = 1; i < n * 4; i++) t[i] = inf;
}
void pull(int i) {
t[i] = max(t[i * 2], t[i * 2 + 1]);
}
void update(int i, int b, int e, int x, int v) {
if (b == e) return void (t[i] = v);
int mid = (b + e) / 2;
if (x <= mid) update(i * 2, b, mid, x, v);
else update(i * 2 + 1, mid + 1, e, x, v);
pull(i);
}
void update(int x, int v) {
update(1, 1, n, x, v);
}
int query(int i, int b, int e, int l, int r) {
if (r < b || e < l) return -inf;
if (l <= b && e <= r) return t[i];
int mid = (b + e) / 2;
int ql = query(i * 2, b, mid, l, r);
int qr = query(i * 2 + 1, mid + 1, e, l, r);
return max(ql, qr);
}
int query(int l, int r) {
return query(1, 1, n, l, r);
}
}
st;
int main() {
cin.tie(nullptr)->ios_base::sync_with_stdio(false);
cin >> n >> q >> s;
st.init();
for (int i = 1; i <= n; i++) {
if (s[i-1] == '1') st.update(i, 0);
}
for (int i = 1; i <= q; i++) {
string type;
cin >> type;
if (type == "toggle") {
int pos;
cin >> pos;
st.update(pos, i);
}
else {
int a, b;
cin >> a >> b;
int mx = st.query(a, b - 1);
cout << max(0, i - mx) << "\n";
}
}
}