#include <bits/stdc++.h>
#define lx (x<<1)
#define rx (x<<1|1)
#define mid (l+r>>1)
using namespace std;
const int N=2e5+3;
char a[N];
int n,m,st[N<<2];
bool lazy[N<<2];
void build(int x,int l,int r){
if(l==r){
st[x]=a[l]-'0';
return ;
}
build(lx,l,mid);
build(rx,mid+1,r);
st[x]=st[lx]+st[rx];
}
void up(int x,int l,int r){
st[x]=r-l+1-st[x];
lazy[x]=1;
}
void down(int x,int l,int r){
if(lazy[x])up(lx,l,mid),up(rx,mid+1,r);
lazy[x]=0;
}
void bian(int x,int l,int r,int sl,int sr){
if(sr<l||sl>r)return ;
if(sl<=l&&sr>=r){
up(x,l,r);
return ;
}
down(x,l,r);
bian(lx,l,mid,sl,sr);
bian(rx,mid+1,r,sl,sr);
st[x]=st[lx]+st[rx];
}
int query(int x,int l,int r,int sl,int sr){
if(sr<l||sl>r)return 0;
if(sl<=l&&sr>=r)return st[x];
down(x,l,r);
return query(lx,l,mid,sl,sr)+query(rx,mid+1,r,sl,sr);
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
while(m--){
int t,x,y;cin>>t>>x>>y;
if(t==0)bian(1,1,n,x,y);
else printf("%d\n",query(1,1,n,x,y));
}
return 0;
}