#include<iostream>
using namespace std;
const int N=1e5+5;
const int maxtot=5e3+5;
int sum[maxtot]={0},s[maxtot],t[maxtot];
bool val[N]={0};
bool bedone[maxtot]={0};
int size,tot,n,m;
int getid(int);
int sqrt(int);
void change(int,int);
int getsum(int,int);
void pushdown(int);
int main(){
ios::sync_with_stdio(0);
cin>>n>>m;
size=sqrt(n);
tot=size+(n%size>0?1:0);
for(int i=1;i<=tot;i++){
s[i]=(i-1)*size+1;
t[i]=i*size;
}
int a,b,c;
while(m--){
cin>>c>>a>>b;
if(c) cout<<getsum(a,b)<<endl;
else change(a,b);
}
return 0;
}
int sqrt(int x){
int ret,l=0,r=x,mid;
while(l<=r){
mid=(l+r)>>1;
if(mid*mid==x) return mid;
if(mid*mid<x){
ret=mid;
l=mid+1;
}
else r=mid-1;
}
return ret;
}
int getid(int x){
return (x+size-1)/size;
}
void pushdown(int x){
if(!bedone[x]) return;
for(int i=s[x];i<=t[x];i++)
val[i]=!val[i];
bedone[x]=0;
}
void change(int l,int r){
int a=getid(l),b=getid(r);
if(a==b){
for(int i=l;i<=r;i++){
val[i]=!val[i];
if(val[i]) sum[a]++;
else sum[a]--;
}
return;
}
for(int i=l;i<=t[a];i++){
val[i]=!val[i];
if(val[i]) sum[a]++;
else sum[a]--;
}
for(int i=s[b];i<=r;i++){
val[i]=!val[i];
if(val[i]) sum[b]++;
else sum[b]--;
}
for(int i=a+1;i<b;i++){
sum[i]=size-sum[i];
bedone[i]=!bedone[i];
}
}
int getsum(int l,int r){
int ret=0,a=getid(l),b=getid(r);
pushdown(a);
pushdown(b);
if(a==b){
for(int i=l;i<=r;i++)
if(val[i]) ret++;
return ret;
}
// cerr<<a<<" "<<b<<endl;
for(int i=l;i<=t[a];i++)
if(val[i]) ret++;
for(int i=s[b];i<=r;i++)
if(val[i]) ret++;
// cerr<<ret<<endl;
for(int i=a+1;i<b;i++)
ret+=sum[i];
return ret;
}