#include<bits/stdc++.h>
using namespace std;
struct fdd{
long long l,r,h,la;
}a[400005];
long long b[100005];
long long n,m;
void push_d(long long u){
int len=a[u].r-a[u].l+1;
a[u*2].la^=1;
a[u*2].h=(len-len/2)-a[u*2].h;
a[u*2+1].la^=1;
a[u*2+1].h=(len-len/2)-a[u*2].h;
a[u].la=0;
return;
}
void biu(long long u,long long l,long long r){
a[u].l=l;
a[u].r=r;
if(l==r){
a[u].h=b[l];
return;
}
long long mid=(l+r)/2;
biu(u*2,l,mid);
biu(u*2+1,mid+1,r);
a[u].h=a[u*2].h+a[u*2+1].h;
}
void dd(long long u,long long z,long long y){
push_d(u);
if(a[u].l>=z&&a[u].r<=y){
a[u].la^=1;
a[u].h=a[u].r-a[u].l+1-a[u].h;
return;
}
int mid=(a[u].l+a[u].r)/2;
if(a[u].l<=mid) dd(u*2,z,y);
if(mid<a[u].r) dd(u*2+1,z,y);
a[u].h=a[u*2].h+a[u*2+1].h;
}
long long ask(long long k,long long x,long long y){
if(a[k].l>=x&&a[k].r<=y) return a[k].h;
push_d(k);
long long ans=0;
long long mid=(a[k].l+a[k].r)/2;
if(x<=mid) ans+=ask(k*2,x,y);
if(y>mid) ans+=ask(k*2+1,x,y);
return ans;
}
int main(){
cin>>n>>m;
string s;
cin>>s;
for(long long i=1;i<=n;i++){
b[i]=s[i-1];
}
biu(1,1,n);
while(m--){
long long k,l,r;
cin>>k>>l>>r;
if(k==0){
dd(1,l,r);
}else{
cout<<ask(1,l,r)<<endl;
}
}
return 0;
}