#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,a[101000],op,l,r;
struct node{
ll l,r,sum,add;
}t[401000];
void build(ll p,ll l,ll r){
t[p].l=l,t[p].r=r;
if(l==r){
t[p].sum=0;
return;
}
ll mid=(t[p].l+t[p].r)/2;
build(p*2,l,mid);build(p*2+1,mid+1,r);
}
void down(ll p){
t[p*2].sum+=t[p*2].r-t[p*2].l+1-t[p*2].sum;
t[p*2+1].sum=t[p*2+1].r-t[p*2+1].l+1-t[p*2+1].sum;
if(t[p*2].add==0) t[p*2].add=1;
else t[p*2].add=0;
if(t[p*2+1].add==0) t[p*2+1].add=1;
else t[p*2+1].add=0;
t[p].add=0;
}
void update(ll p,ll l,ll r){
if(t[p].l>=l&&t[p].r<=r){
t[p].sum=t[p].r-t[p].l+1-t[p].sum;
if(t[p].add==0){
t[p].add=1;
}
else{
t[p].add=0;
}
return;
}
down(p);
ll mid=(t[p].l+t[p].r)/2;
if(l<=mid)update(p*2,l,r);
if(r>mid)update(p*2+1,l,r);
t[p].sum=t[p*2].sum+t[p*2+1].sum;
}
ll ask(ll p,ll l,ll r){
if(t[p].l>=l&&t[p].r<=r)return t[p].sum;
down(p);
ll ans=0;
ll mid=(t[p].l+t[p].r)/2;
if(l<=mid)ans+=ask(p*2,l,r);
if(r>mid)ans+=ask(p*2+1,l,r);
return ans;
}
int main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;
build(1,1,n);
for(int i=1;i<=m;i++){
cin>>op>>l>>r;
if(op==0){
update(1,l,r);
}
else{
cout<<ask(1,l,r)<<'\n';
}
}
return 0;
}