// just segt.. i want this one to TLE
#include <bits/stdc++.h>
using namespace std;
/*
4 7
1 0 3
0 1 2
1 0 1
1 0 0
0 0 3
1 0 3
1 3 3
*/
int st[500005];
//~ void init(int lo,int hi,int idx){
//~ for(int i=0;i<100005;i++){
//~ st[i].coin=false;
//~ st[i].count=0;
//~ }
//~ return;
//~ if(lo==hi){
//~ st[idx].coin=false;//means its tails...
//~ st[idx].count=0;
//~ return ;
//~ }
//~ init(lo,(lo+hi)/2,2*idx);
//~ init(((lo+hi)/2) +1,hi,2*idx+1);
//~ st[idx].count=(st[2*idx].count + st[2*idx+1].count);
//~ }
void flip(int lo,int hi,int s,int e,int idx){
int pp;
if(s>hi || e<lo)return ;
if(lo>=s && hi<=e)st[idx]=(hi-lo+1)-st[idx];//total children-all set nodes
if(lo==hi)return;
//cout<<"hi "<<lo<<" "<<idx;cin>>pp;
flip(lo,(lo+hi)/2, s,e,2*idx);
flip(((lo+hi)/2) +1,hi, s,e,2*idx+1);
st[idx]=st[2*idx] + st[2*idx+1];
}
int query(int lo,int hi,int s,int e,int idx){
if(s>hi || e<lo)return 0;//nasty..
int pp;
if(lo>=s && hi<=e)return st[idx];
if(lo==hi)return st[lo];
//cout<<"hi "<<lo<<" "<<idx;cin>>pp;
int x=query(lo,(lo+hi)/2,s,e,2*idx);
int y=query((lo+hi)/2+1,hi,s,e,2*idx+1);
return x+y;
}
int main(){
int n,q,i;
scanf("%d%d", &n,&q);
for(i=0;i<q;i++){
int tp,a,b;
scanf("%d%d%d",&tp,&a,&b);
a+=1;b+=1;
if(tp==0)flip(1,n,a,b,1);
else printf("%d\n",query(1,n,a,b,1));
}
return 0;
}
Ly8ganVzdCBzZWd0Li4gaSB3YW50IHRoaXMgb25lIHRvIFRMRSAKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8qCjQgNwoxIDAgMwowIDEgMgoxIDAgMQoxIDAgMAowIDAgMwoxIDAgMyAKMSAzIDMKKi8KaW50IHN0WzUwMDAwNV07Ci8vfiB2b2lkIGluaXQoaW50IGxvLGludCBoaSxpbnQgaWR4KXsKCS8vfiBmb3IoaW50IGk9MDtpPDEwMDAwNTtpKyspewoJCS8vfiBzdFtpXS5jb2luPWZhbHNlOwoJCS8vfiBzdFtpXS5jb3VudD0wOwoJCS8vfiB9CgkvL34gcmV0dXJuOwoJLy9+IGlmKGxvPT1oaSl7CgkJLy9+IHN0W2lkeF0uY29pbj1mYWxzZTsvL21lYW5zIGl0cyB0YWlscy4uLgoJCS8vfiBzdFtpZHhdLmNvdW50PTA7CgkJLy9+IHJldHVybiA7CgkJLy9+IH0KCS8vfiBpbml0KGxvLChsbytoaSkvMiwyKmlkeCk7CgkvL34gaW5pdCgoKGxvK2hpKS8yKSArMSxoaSwyKmlkeCsxKTsKCS8vfiBzdFtpZHhdLmNvdW50PShzdFsyKmlkeF0uY291bnQgKyBzdFsyKmlkeCsxXS5jb3VudCk7CgkvL34gfQoKdm9pZCBmbGlwKGludCBsbyxpbnQgaGksaW50IHMsaW50IGUsaW50IGlkeCl7CglpbnQgcHA7CglpZihzPmhpIHx8IGU8bG8pcmV0dXJuIDsKCWlmKGxvPj1zICYmIGhpPD1lKXN0W2lkeF09KGhpLWxvKzEpLXN0W2lkeF07Ly90b3RhbCBjaGlsZHJlbi1hbGwgc2V0IG5vZGVzCglpZihsbz09aGkpcmV0dXJuOwoJLy9jb3V0PDwiaGkgIjw8bG88PCIgIjw8aWR4O2Npbj4+cHA7CglmbGlwKGxvLChsbytoaSkvMiwgcyxlLDIqaWR4KTsKCWZsaXAoKChsbytoaSkvMikgKzEsaGksIHMsZSwyKmlkeCsxKTsKCXN0W2lkeF09c3RbMippZHhdICsgc3RbMippZHgrMV07Cgl9CmludCBxdWVyeShpbnQgbG8saW50IGhpLGludCBzLGludCBlLGludCBpZHgpewoJaWYocz5oaSB8fCBlPGxvKXJldHVybiAwOy8vbmFzdHkuLgoJaW50IHBwOwoJaWYobG8+PXMgJiYgaGk8PWUpcmV0dXJuIHN0W2lkeF07CglpZihsbz09aGkpcmV0dXJuIHN0W2xvXTsKCS8vY291dDw8ImhpICI8PGxvPDwiICI8PGlkeDtjaW4+PnBwOwoJaW50IHg9cXVlcnkobG8sKGxvK2hpKS8yLHMsZSwyKmlkeCk7CglpbnQgeT1xdWVyeSgobG8raGkpLzIrMSxoaSxzLGUsMippZHgrMSk7CglyZXR1cm4geCt5OwoJfQppbnQgbWFpbigpewoJaW50IG4scSxpOwoJc2NhbmYoIiVkJWQiLCAmbiwmcSk7Cglmb3IoaT0wO2k8cTtpKyspewoJCWludCB0cCxhLGI7CgkJc2NhbmYoIiVkJWQlZCIsJnRwLCZhLCZiKTsKCQlhKz0xO2IrPTE7CgkJaWYodHA9PTApZmxpcCgxLG4sYSxiLDEpOwoJCWVsc2UgcHJpbnRmKCIlZFxuIixxdWVyeSgxLG4sYSxiLDEpKTsKCQl9CglyZXR1cm4gMDsKCX0K