#include<bits/stdc++.h>
#define N 100050
typedef long long ll;
using namespace std;
ll n,m;
struct Tr{
ll sum,l,r;
};
Tr tr[N*4];
ll lazy[4*N];
vector<ll>ans;
void build(ll k,ll l,ll r){
tr[k].l=l;
tr[k].r=r;
tr[k].sum=0;
if(l<r){
ll mid=(l+r)/2;
build(2*k,l,mid);
build(2*k+1,mid+1,r);
}
}
void pushdown(ll k){
if(tr[k].l==tr[k].r){
return;
}
lazy[2*k]+=lazy[k];
lazy[2*k+1]+=lazy[k];
if(lazy[k]%2){
tr[2*k].sum=tr[2*k].r-tr[2*k].l+1-tr[2*k].sum;
tr[2*k+1].sum=tr[2*k].r-tr[2*k].l+1-tr[2*k+1].sum;
}
lazy[k]=0;
}
void change(ll k,ll l,ll r){
ll L=tr[k].l;
ll R=tr[k].r;
if(l>R||r<L){
return;
}
if(l<=L && R<=r){
tr[k].sum=R-L+1-tr[k].sum;
lazy[k]++;
}else{
ll mid=(L+R)/2;
pushdown(k);
if(l<=mid){
change(2*k,l,r);
}
if(mid+1<=R){
change(2*k+1,l,r);
}
tr[k].sum=tr[2*k].sum+tr[2*k+1].sum;
}
}
ll check(ll k,ll l,ll r){
ll L=tr[k].l;
ll R=tr[k].r;
ll mid=(L+R)/2;
pushdown(k);
if(l<=L && R<=r){
return tr[k].sum;
}
ll all=0;
if(l<=mid){
all+=check(2*k,l,r);
}
if(mid+1<=r){
all+=check(2*k+1,l,r);
}
return all;
}
int main(){
cin>>n>>m;
build(1,1,n);
for(int i=1;i<=m;i++){
ll c,a,b;
scanf("%lld %lld %lld",&c,&a,&b);
if(c){
ans.push_back(check(1,a,b));
}else{
change(1,a,b);
}
}
for(auto p=ans.begin();p!=ans.end();p++){
cout<<*p<<endl;
}
return 0;
}