#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,q,m,opt,x,y,a[N];
struct SegTree{
int l,r,sum;
bool lazy;
#define l(x) tree[x].l
#define r(x) tree[x].r
#define sum(x) tree[x].sum
#define lazy(x) tree[x].lazy
SegTree(){l=r=sum=lazy=0;}
}tree[N<<2];
void build(int x,int l,int r){
if(l>r)return;
if(l==r){
l(x)=r(x)=l;
return;
}
int mid=l+r>>1;
build(x<<1,l,mid);
build(x<<1|1,mid+1,r);
l(x)=l,r(x)=r;
}
void modify(int x,int askl,int askr){
int l=l(x),r=r(x);
if(l>r)return;
if(l==r){
sum(x)^=1;
return;
}
if(askl<=l&&r<=askr){
lazy(x)^=1;
sum(x)=r-l+1-sum(x);
return;
}
int mid=l+r>>1;
if(askl<=mid)modify(x<<1,askl,askr);
if(askr>mid)modify(x<<1|1,askl,askr);
sum(x)=sum(x<<1)+sum(x<<1|1);
}
void pushdown(int x){
lazy(x<<1)^=1;
lazy(x<<1|1)^=1;
sum(x<<1)=r(x<<1)-l(x<<1)+1-sum(x<<1);
sum(x<<1|1)=r(x<<1|1)-l(x<<1|1)+1-sum(x<<1|1);
}
int ask(int x,int askl,int askr){
int l=l(x),r=r(x);
if(lazy(x))pushdown(x);
if(askl<=l&&r<=askr)return sum(x);
int mid=l+r>>1,ret=0;
if(askl<=mid)ret+=ask(x<<1,askl,askr);
if(askr>mid)ret+=ask(x<<1|1,askl,askr);
return ret;
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
build(1,1,n);
while(m--){
cin>>opt>>x>>y;
if(!opt)modify(1,x,y);
else cout<<ask(1,x,y)<<endl;
}
}