#include <bits/stdc++.h>
using namespace std;
string s;
const int mx = 5e5;
int tree[4*mx];
void build(int root,int l,int r)
{
if(l == r)
{
tree[root] = (s[l]=='0'?0:1);
return ;
}
int mid = (l+r)/2;
build(root*2,l,mid);
build(root*2+1,mid+1,r);
tree[root] = tree[root*2] + tree[root*2+1];
}
void ChangeTree(int root,int start,int end,int l,int r)
{
if(l == r)
{
tree[root] = (tree[root]==0?1:0);
return ;
}
int mid = (l+r)/2;
if(start <= mid)
{
ChangeTree(root*2,start,end,l,mid);
}
if(end > mid)
{
ChangeTree(root*2+1,start,end,mid+1,r);
}
tree[root] = tree[root*2] + tree[root*2+1];
}
int query(int root, int l, int r, int L, int R) {
if (L > r || R < l) {
return 0;
}
if (L <= l && R >= r) {
return tree[root];
}
int mid = (l + r) / 2;
int left = query(root * 2, l, mid, L, R);
int right = query(root * 2 + 1, mid + 1, r, L, R);
return left + right;
}
int main()
{
int n,m;
cin >> n >> m;
cin >> s;
build(1, 0, n-1);
for (int i = 0; i < m; i++)
{
int c,l,r;
cin >> c >> l >> r;
if(c == 1)
{
ChangeTree(1, l - 1, r - 1, 0, n - 1);
}
else if(c == 2)
{
cout << query(1, 0, n - 1, l - 1, r - 1) << endl;
}
}
return 0;
}