#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int n,m;
int a[N],ans[N],add[N],pos[N];
int block;
void pls(int l,int r){
int nl=pos[l],nr=pos[r];
if(nl==nr){
for(int i=l;i<=r;i++){
if((a[i]+add[nl])%2==0) ans[nl]++;
else ans[nl]--;
a[i]^=1;
}
return;
}
for(int i=nl+1;i<nr;i++){
add[i]^=1;
ans[i]=block-ans[i];
}
for(int i=l;i<=block*nl;i++){
if((a[i]+add[nl])%2==0) ans[nl]++;
else ans[nl]--;
a[i]^=1;
}
for(int i=block*(nr-1)+1;i<=r;i++){
if((a[i]+add[nr])%2==0) ans[nr]++;
else ans[nr]--;
a[i]^=1;
}
}
void query(int l,int r){
int nl=pos[l],nr=pos[r];
int res=0;
if(nl==nr){
for(int i=l;i<=r;i++){
res+=(a[i]+ans[nl])%2;
}
printf("%lld\n",res);
return;
}
for(int i=nl+1;i<nr;i++) res+=ans[i];
for(int i=l;i<=block*nl;i++) res+=(a[i]+add[nl])%2;
for(int i=block*(nr-1)+1;i<=r;i++) res+=(a[i]+add[nr])%2;
printf("%lld\n",res);
}
signed main(){
scanf("%lld%lld",&n,&m);
block=sqrt(n);
for(int i=1;i<=n;i++){
pos[i]=(i-1)/block+1;
}
for(int i=1;i<=m;i++){
int op,l,r;
scanf("%lld%lld%lld",&op,&l,&r);
if(!op) pls(l,r);
else query(l,r);
}
return 0;
}
样例过了的,调了一下好像有时没输出