#include<bits/stdc++.h>
using namespace std;
#define ls (p<<1)
#define rs (p<<1|1)
#define inf 200005
int n,m,nl,nr;
string str;
int a[inf],tree[inf<<2],tag[inf<<2];
inline void build(int p,int l,int r)
{
if(l==r){tree[p]=a[l];return;}
int mid=(l+r)>>1;
build(ls,l,mid);
build(rs,mid+1,r);
tree[p]=tree[ls]+tree[rs];
}
inline void push_down(int p,int len)
{
if(tag[p])
{
tag[p]=0;
tag[ls]^=1;
tag[rs]^=1;
tree[ls]=(len-len>>1)-tree[ls];
tree[rs]=(len>>1)-tree[rs];
}
}
inline void change(int p,int l,int r)
{
if(l>=nl && r<=nr)
{
tag[p]^=1;
tree[p]=r-l+1-tree[p];
return;
}
push_down(p,r-l+1);
/*
if(l==r){tree[p]^=1;return;}
第一次这么写TLE但是答案妹错
加了上面那个if之后WA了orz
谢谢好心人帮忙改代码qwq
*/
int mid=(l+r)>>1;
if(nl<=mid)change(ls,l,mid);
if(nr>mid) change(rs,mid+1,r);
tree[p]=tree[ls]+tree[rs];
}
inline int ans(int p,int l,int r)
{
if(l>=nl && r<=nr)return tree[p];
push_down(p,r-l+1);
int mid=(l+r)>>1,sum=0;
if(nl<=mid)sum+=ans(ls,l,mid);
if(nr>mid) sum+=ans(rs,mid+1,r);
return sum;
}
signed main()
{
scanf("%d%d",&n,&m);
cin>>str;
int len=str.length();
for(int i=0;i<len;++i)a[i+1]=str[i]-'0';
build(1,1,n);
for(int i=1;i<=m;++i)
{
int rqyy;
scanf("%d %d %d",&rqyy,&nl,&nr);
if(rqyy==0)change(1,1,n);
if(rqyy==1)printf("%d\n",ans(1,1,n));
}
return 0;
}