#include<bits/stdc++.h>
using namespace std;
int n,m,a[200010],sum;
char c[200010];
struct stt{
int l,r,sum,add;
}t[800010];
void make(int s,int l,int r)
{
t[s].l=l;
t[s].r=r;
if(l==r)
{
t[s].sum=a[l];
return;
}
int mid=(l+r)>>1;
make(s*2,l,mid);
make(s*2+1,mid+1,r);
t[s].sum=t[s*2].sum+t[s*2+1].sum;
}
void print(int s)
{
cout<<t[s].l<<" "<<t[s].r<<" "<<t[s].sum<<endl;
if(t[s].l==t[s].r){
// cout<<t[s].sum;
return;
}
print (s*2);
print(s*2+1);
}
void pushdown(int s)
{
if(t[s].l==t[s].r)return;
while(t[s].sum>1)t[s].sum-=2;
if(t[s].sum==1)
{
int p=s*2;
t[p].add++;
t[p+1].add++;
t[p].sum=t[p].r-t[p].l+1-t[p].sum;
t[p+1].sum=t[p+1].r-t[p+1].l+1-t[p+1].sum;
t[s].sum=0;
}
}
void change(int s,int l,int r)
{
if(l<=t[s].l&&r>=t[s].r)
{
t[s].add++;
t[s].sum=t[s].r-t[s].l+1-t[s].sum;
return;
}
pushdown(s);
int mid=(t[s].r+t[s].l)>>1;
if(mid<l)change(s*2+1,l,r);
else if(mid>=r)change(s*2,l,r);
else change(s*2,l,r),change(s*2+1,l,r);
t[s].sum=t[s*2].sum+t[s*2+1].sum;
}
int search(int s,int l,int r)
{
//cout<<s<<endl;
if(l<=t[s].l&&r>=t[s].r)
{
return t[s].sum;
}
pushdown(s);
int mid=(t[s].r+t[s].l)>>1;
if(mid<l) return search(s*2+1,l,r);
else if(mid>=r) return search(s*2,l,r);
else return search(s*2,l,r)+search(s*2+1,l,r);
}
int main()
{
int l,r;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>c[i];
a[i]=c[i]-'0';
}
make(1,1,n);
print(1);
cout<<"\n";
for(int i=1;i<=m;i++)
{
sum=0;
cin>>a[0]>>l>>r;
if(a[0]==0)
{
change(1,l,r);
cout<<"\n";
print(1);
cout<<"\n";
}
if(a[0]==1)
{
cout<<search(1,l,r)<<endl;
}
}
}