#include<cstdio>
#include<algorithm>
#define lc p<<1
#define rc p<<1|1
#define N 233715
using namespace std;
struct suky{
int l,r,tag,sum;
}s[4*N];
int n,m,a[N];
char suk[N];
void pushup(int p){
s[p].sum=s[lc].sum+s[rc].sum;
}
void build(int p,int l,int r){
s[p].l=l,s[p].r=r;
if(l==r){
//printf("%d,%d\n",l,a[l]);
s[p].sum=a[l];
return;
}
int mid=(l+r)/2;
build(lc,l,mid);
build(rc,mid+1,r);
pushup(p);
}
void pushdown(int p,int len){
//printf("%d:%d\n",p,s[p].sum);
if(!s[p].tag)return;
s[lc].tag^=1;
s[rc].tag^=1;
s[lc].sum=len-(len>>1)-s[lc].sum;
s[rc].sum=(len>>1)-s[rc].sum;
s[p].tag=0;
}
void change(int p,int l,int r){
if(s[p].l>r||s[p].r<l)return;
if(s[p].l>=l&&s[p].r<=r){
s[p].tag^=1;
s[p].sum=r-l+1-s[p].sum;
return;
}
pushdown(p,r-l+1);
change(lc,l,r);
change(rc,l,r);
pushup(p);
}
int query(int p,int l,int r){
if(s[p].l>r||s[p].r<l)return 0;
if(s[p].l>=l&&s[p].r<=r){
return s[p].sum;
}
pushdown(p,r-l+1);
return query(lc,l,r)+query(rc,l,r);
}
signed main(){
scanf("%d%d",&n,&m);
scanf("%s",suk+1);
for(int i=1;i<=n;i++)a[i]=suk[i]-'0';
build(1,1,n);
// for(int i=1;i<=4*n;i++)printf("%d:%d\n",i,s[i].sum);
for(int i=1;i<=m;i++){
int op,a,b;
scanf("%d%d%d",&op,&a,&b);
if(op==0)change(1,a,b);
else printf("%d\n",query(1,a,b));
}
return 0;
}