#include<bits/stdc++.h>
#define fst ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
#define endl '\n'
using namespace std;
const int N = 2e5+1;
int n,m;
struct node{
int l,r,sum;
bool lazy;
}tr[N*4];
void build(int u,int l,int r){
tr[u].l=l,tr[u].r=r;
tr[u].lazy=0;
if(l==r){
tr[u].sum=1;
return ;
}
int mid=(l+r)/2;
build(u*2,l,mid);
build(u*2+1,mid+1,r);
tr[u].sum=tr[u*2].sum+tr[u*2+1].sum;
}
void pushdown(int u){
if(tr[u].lazy){
tr[2*u].lazy^=1;
tr[u*2].sum=(tr[u*2].r-tr[u*2].l+1)-tr[u*2].sum;
tr[2*u+1].lazy^=1;
tr[u*2+1].sum=(tr[u*2+1].r-tr[u*2+1].l+1)-tr[u*2+1].sum;
tr[u].lazy=0;
}
}
void change(int u,int l,int r){
int k=tr[u].r-tr[u].l+1;
if(l<=tr[u].l and r>=tr[u].r){
tr[u].sum=k-tr[u].sum;
tr[u].lazy^=1;
return ;
}
pushdown(u);
int mid=(tr[u].l+tr[u].r)/2;
if(l<=mid) change(u*2,l,mid);
if(r>mid) change(u*2+1,mid+1,r);
tr[u].sum=tr[u*2].sum+tr[u*2+1].sum;
return ;
}
int search(int u,int l,int r){
if(l<=tr[u].l and r>=tr[u].r) return tr[u].sum;
pushdown(u);
int mid=(tr[u].l+tr[u].r)/2,ans=0;
if(l<=mid) ans+=search(u*2,l,min(r,mid));
if(mid<r) ans+=search(u*2+1,max(l,mid),r);
return ans;
}
signed main(){
fst
cin>>n>>m;
build(1,1,n);
while(m--){
int c,a,b;
cin>>c>>a>>b;
if(c==0) change(1,a,b);
if(c==1) cout<<search(1,a,b)<<endl;
}
return 0;
}