#include <iostream>
using namespace std;
inline int read(){
int x=0,f=1;
char ch=getchar();
while (ch<'0'||ch>'9'){
if (ch=='-') f=-1;
ch=getchar();
}
while (ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
int n,m,a[200010],segment_tree[800010],lazy[800010];
int get_sum(int l,int r,int s,int t,int now){
lazy[now]%=2;
int son=now<<1;
if(lazy[now]){
segment_tree[now]=(t-s+1)-segment_tree[now];
lazy[son]+=lazy[now],lazy[son+1]+=lazy[now];
}
lazy[now]=0;
if(l<=s&&t<=r) return segment_tree[now];
int sum=0,mid=(s+t)>>1;
if(l<=mid) sum+=get_sum(l,r,s,mid,son);
if(r>mid) sum+=get_sum(l,r,mid+1,t,son+1);
return sum;
}
void update(int l,int r,int s,int t,int now){
lazy[now]%=2;
int son=now<<1;
if(lazy[now]){
segment_tree[now]=(t-s+1)-segment_tree[now];
lazy[son]+=lazy[now],lazy[son+1]+=lazy[now];
}
lazy[now]=0;
if(l<=s&&t<=r) {
lazy[now]++;
return;
}
int mid=(s+t)>>1;
if(l<=mid) update(l,r,s,mid,son);
if(r>mid) update(l,r,mid+1,t,son+1);
}
int main(){
n=read(),m=read();
for(int i=1;i<=m;i++){
int op,l,r;
op=read(),l=read(),r=read();
if(op==1) printf("%d\n",get_sum(l,r,1,n,1));
else update(l,r,1,n,1);
}
return 0;
}