#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
char a[N];
struct node{
int l,r;
int lz=0;
int sum;
}tree[N<<2];
int n,m;
void build(int x,int l,int r)
{
tree[x].l=l,tree[x].r=r;tree[x].lz=0;
if(l==r)
{
tree[x].sum=a[l]-'0';
cout<<tree[x].sum;
return ;
}
int mid=l+r>>1;
build(x<<1,l,mid);
build(x<<1|1,mid+1,r);
tree[x].sum=tree[x<<1].sum+tree[x<<1|1].sum;
}
void pushdown(int x)
{
if(tree[x].lz==1)
{
tree[x<<1].sum=(tree[x<<1].r-tree[x<<1].l+1-tree[x<<1].sum);
tree[x<<1|1].sum=(tree[x<<1|1].r-tree[x<<1|1].l+1-tree[x<<1|1].sum);
tree[x<<1].lz^=1;
tree[x<<1|1].lz^=1;
tree[x].lz=0;
}
}
void change(int x,int l,int r)
{
if(l<=tree[x].l&&tree[x].r<=r)
{
tree[x].sum=tree[x].r-tree[x].l+1-tree[x].sum;
tree[x].lz^=1;
return ;
}
pushdown(x);
int mid=tree[x].l+tree[x].r>>1;
if(l<=mid)change(x<<1,l,mid);
if(r>mid) change(x<<1|1,mid+1,r);
tree[x].sum=tree[x<<1].sum+tree[x<<1|1].sum;
}
int ask(int x,int l,int r)
{
int ans=0;
if(l<=tree[x].l&&tree[x].r<=r)return tree[x].sum;
pushdown(x);
int mid=tree[x].l+tree[x].r>>1;
if(l<=mid)ans+=ask(x<<1,l,mid);
if(r>mid) ans+=ask(x<<1|1,mid+1,r);
return ans;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
build(1,1,n);
for(int i=1;i<=m;i++)
{
int p,x,y;cin>>p>>x>>y;
if(p==0)
{
change(1,x,y);
}
if(p==1)
{
cout<<ask(1,x,y)<<endl;
}
}
}