#include<iostream>
#include<algorithm>
using namespace std;
#define N 100003
int a[N];
typedef struct
{
int Ison;
int mark;
int mark;
int left,right;
}S;
S d[N*2+1];
int n,m;
void create(int l,int r,int k)
{
if(l>r)
return ;
d[k].left=l;
d[k].right=r;
d[k].Ison=1;
d[k].mark=0;
if(l==r)
return ;
int mid=(l+r)/2;
create(l,mid,k*2+1);
create(mid+1,r,k*2+2);
}
void turn(int l,int r,int k)
{
if(d[k].left>r||d[k].right<l)
return ;
if(d[k].left>=l&&d[k].right<=r)
d[k].mark=1;
int mid=(d[k].left+d[k].right)/2;
if(mid>=l)
{
turn(l,r,k*2+1);
}
if(mid+1<=r)
{
turn(l,r,k*2+2);
}
}
int query(int l,int r,int k)
{
if(d[k].right<l||d[k].left>r)
return 0;
int sum=d[k].right-d[k].left+1;
if(d[k].left!=d[k].right)
{
if(d[k].mark%2)
{
d[k].Ison=!d[k].Ison;
d[k].mark=0;
d[k*2+1].mark++;
d[k*2+2].mark++;
}
}
if(d[k].left>=l&&d[k].right<=r)
{
if(d[k].Ison)
{
return sum;
}
else
{
return -sum;
}
}
}
int main()
{
freopen("in.txt","r",stdin);
cin>>n>>m;
int op,si,sj;
create(1,n,0);
while(m--)
{
scanf("%d%d%d",&op,&si,&sj);
switch (op)
{
case 0:
turn(si,sj,0);
case 1:
query(si,sj,0);
}
}
return 0;
}