#include<bits/stdc++.h>
using namespace std;
int n,m;
int add[100010]={0};
int a[100100]={0};
int ed[100010]={0},st[100010]{0},pos[100010]={0};
int sum[100010];
void change(int l,int r){
int p=pos[l],q=pos[r];
if(p==q){
for(int i=l;i<=r;i++){
a[i]=(a[i]+1)%2;
}
sum[p]+=(r-l+1);
}else{
for(int i=p+1;i<=q-1;i++){
add[i]=(add[i]+1)%2;
}
for(int i=l;i<=ed[p];i++)
a[i]=(a[i]+1)%2;
sum[p]+=(ed[p]-l+1);
for(int i=st[q];i<=r;i++)
a[i]=(a[i]+1)%2;
sum[q]+=(r-st[q]+1);
}
}
long long ask(int l,int r){
int p=pos[l],q=pos[r];
long long ans=0;
if(p==q){
for(int i=l;i<=q;i++){
ans+=a[i];
}
ans+=(add[p]*(r-l+1))%2;
}else{
for(int i=p+1;i<=q-1;i++){
ans+=(sum[i]+add[i]*(ed[i]-st[i]+1))%2;
}
for(int i=l;i<=ed[p];i++)
ans+=a[i];
ans+=(add[p]*(ed[p]-l+1))%2;
for(int i=st[q];i<=r;i++){
ans+=a[i];
}
ans+=(add[q]*(r-st[q]+1))%2;
}
return ans;
}
int main(){
cin>>n>>m;
int block=sqrt(n);
int t=n/block;
if(n%block){
t++;
}
for(int i=1;i<=t;i++){
st[i]=(i-1)*block+1;
ed[i]=i*block;
}
ed[t]=n;
for(int i=1;i<=n;i++){
pos[i]=(i-1)/block+1;
}
for(int i=1;i<=t;i++){
for(int j=st[i];j<=ed[i];j++){
sum[i]+=a[j];
}
}
for(int i=1;i<=m;i++){
int c,l,r;
cin>>c>>l>>r;
if(c==0){
change(l,r);
}else if(c==1){
cout<<ask(l,r)<<endl;
}
}
return 0;
}