#include<iostream>
using namespace std;
const int maxn=1e6;
long long n,m;
long long v[4*maxn],lazy[4*maxn];
void update(long long k){
v[k]=v[k<<1]+v[k<<1|1];
}
void spread_lazy(long long l,long long r,long long k){
if(lazy[k]){
long long mid=(l+r)>>1;
lazy[k<<1]+=lazy[k];
lazy[k<<1|1]+=lazy[k];
v[k<<1]=(mid-l+1)-v[k<<1];
v[k<<1|1]=(r-mid)-v[k<<1|1];
lazy[k]=0;
}
}
void change(long long l,long long r,long long nowl,long long nowr,long long k){
if(l<=nowl&&r>=nowr){
v[k]=(nowr-nowl+1)-v[k];
lazy[k]+=1;
return;
}
long long mid=(nowl,nowr)>>1;
if(l<=mid){
change(l,r,nowl,mid,k<<1);
}
if(r>mid){
change(l,r,mid+1,nowr,k<<1|1);
}
update(k);
}
long long get_out(long long l,long long r,long long nowl,long long nowr,long long k){
if(l<=nowl&&r>=nowr){
return v[k];
}
long long mid=(nowl+nowr)>>1;
spread_lazy(nowl,nowr,k);
long long ans=0;
if(l<=mid){
ans+=get_out(l,r,nowl,mid,k<<1);
}
if(r>mid){
ans+=get_out(l,r,mid+1,nowr,k<<1|1);
}
return ans;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int s,x,y;
cin>>s>>x>>y;
if(s==0){
change(x,y,1,n,1);
}else{
cout<<get_out(x,y,1,n,1)<<endl;
}
}
}