#include <bits/stdc++.h>
using namespace std;
int n,m;
struct node
{
int l,r,add,sum;
}a[400005];
void build(int p,int l,int r)
{
a[p].l=l,a[p].r=r,a[p].add=0,a[p].sum=0;
if(l==r)
return;
int mid=(l+r)>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
a[p].sum=a[p<<1].sum+a[p<<1|1].sum;
}
void pushdown(int p)
{
if(a[p].add)
{
a[p<<1].add^=1;
a[p<<1|1].add^=1;
a[p<<1].sum=a[p<<1].r-a[p<<1].l+1-a[p<<1].sum;
a[p<<1|1].sum=a[p<<1|1].r-a[p<<1|1].l+1-a[p<<1|1].sum;
a[p].add=0;
}
}
void update(int p,int l,int r)
{
if(a[p].l==l&&a[p].r==r)
{
a[p].sum=a[p<<1].r-a[p<<1|1].l+1-a[p].sum;
a[p].add^=1;
return;
}
pushdown(p);
int mid=(a[p].l+a[p].r)>>1;
if(r<=mid) update(p<<1,l,r);
else if(l>mid) update(p<<1|1,l,r);
else
{
update(p<<1,l,mid);
update(p<<1|1,mid+1,r);
}
a[p].sum=a[p<<1].sum+a[p<<1|1].sum;
}
int query(int p,int l,int r)
{
if(a[p].l==l&a[p].r==r) return a[p].sum;
pushdown(p);
int mid=(a[p].l+a[p].r)>>1;
if(r<=mid) return query(p<<1,l,r);
else if(l>mid) return query(p<<1|1,l,r);
else return query(p<<1,l,mid)+query(p<<1|1,mid+1,r);
}
int main()
{
cin>>n>>m;
build(1,1,n);
for(int i=1;i<=m;i++)
{
int c,x,y;
cin>>c>>x>>y;
if(c==0)
{
update(1,x,y);
}
else
{
cout<<query(1,x,y)<<endl;
}
}
return 0;
}