// just segt.. i want this one to TLE
#include <bits/stdc++.h>
using namespace std;
struct node{
int count = 0;
bool coin = false;
};
node st[500005];
void init(int lo,int hi,int idx){
for(int i=0;i<500005;i++){
st[i].coin=false;
st[i].count=0;
}
return;
if(lo==hi){
st[idx].coin=false;//means its tails...
st[idx].count=0;
return ;
}
init(lo,(lo+hi)/2,2*idx);
init(((lo+hi)/2) +1,hi,2*idx+1);
st[idx].count=(st[2*idx].count + st[2*idx+1].count);
}
void flip(int lo,int hi,int s,int e,int idx){
if(s>hi || e<lo)return ;
if(lo==hi){
st[lo].coin=1-st[lo].coin;
if(st[lo].coin)st[lo].count=1;
else st[lo].count=0;
return ;
}
flip(lo,(lo+hi)/2, s,e,2*idx);
flip(((lo+hi)/2) +1,hi, s,e,2*idx+1);
st[idx].count=st[2*idx].count + st[2*idx+1].count;
}
node combine(node l,node r){
node pp;
pp.count=l.count+r.count;
return pp;
}
node query(int lo,int hi,int s,int e,int idx){
//if(s>hi || e<lo)return 0;//nasty..
//if(lo>=s && hi<=e)return st[idx];
if(s==lo && e==hi)
return st[idx];
int mid=((lo+hi)/2);
if(mid>=e)
return query(lo,mid,s,e,2*idx);
else if(mid<s)
return query(mid+1,hi,s,e,2*idx+1);
return combine(query(lo,mid,s,mid,2*idx),query(mid+1,hi,mid+1,e,2*idx+1));
}
int main(){
int n,q,i;
//init(1,n,1);
scanf("%d%d", &n,&q);
for(i=0;i<q;i++){
int tp,a,b;
scanf("%d%d%d",&tp,&a,&b);
//a+=1;b+=1;
//if(tp==0)flip(1,n,a,b,1);
printf("%d\n",(query(0,n-1,a,b,1)).count);
}
return 0;
}
Ly8ganVzdCBzZWd0Li4gaSB3YW50IHRoaXMgb25lIHRvIFRMRSAKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3Qgbm9kZXsKCWludCBjb3VudCA9IDA7Cglib29sIGNvaW4gPSBmYWxzZTsKCX07Cm5vZGUgc3RbNTAwMDA1XTsKdm9pZCBpbml0KGludCBsbyxpbnQgaGksaW50IGlkeCl7Cglmb3IoaW50IGk9MDtpPDUwMDAwNTtpKyspewoJCXN0W2ldLmNvaW49ZmFsc2U7CgkJc3RbaV0uY291bnQ9MDsKCQl9CglyZXR1cm47CglpZihsbz09aGkpewoJCXN0W2lkeF0uY29pbj1mYWxzZTsvL21lYW5zIGl0cyB0YWlscy4uLgoJCXN0W2lkeF0uY291bnQ9MDsKCQlyZXR1cm4gOwoJCX0KCWluaXQobG8sKGxvK2hpKS8yLDIqaWR4KTsKCWluaXQoKChsbytoaSkvMikgKzEsaGksMippZHgrMSk7CglzdFtpZHhdLmNvdW50PShzdFsyKmlkeF0uY291bnQgKyBzdFsyKmlkeCsxXS5jb3VudCk7Cgl9Cgp2b2lkIGZsaXAoaW50IGxvLGludCBoaSxpbnQgcyxpbnQgZSxpbnQgaWR4KXsKCWlmKHM+aGkgfHwgZTxsbylyZXR1cm4gOwoJaWYobG89PWhpKXsKCQlzdFtsb10uY29pbj0xLXN0W2xvXS5jb2luOwoJCWlmKHN0W2xvXS5jb2luKXN0W2xvXS5jb3VudD0xOwoJCWVsc2Ugc3RbbG9dLmNvdW50PTA7CgkJcmV0dXJuIDsKCQl9CglmbGlwKGxvLChsbytoaSkvMiwgcyxlLDIqaWR4KTsKCWZsaXAoKChsbytoaSkvMikgKzEsaGksIHMsZSwyKmlkeCsxKTsKCXN0W2lkeF0uY291bnQ9c3RbMippZHhdLmNvdW50ICsgc3RbMippZHgrMV0uY291bnQ7Cgl9Cm5vZGUgY29tYmluZShub2RlIGwsbm9kZSByKXsKCW5vZGUgcHA7CglwcC5jb3VudD1sLmNvdW50K3IuY291bnQ7CglyZXR1cm4gcHA7Cgl9Cm5vZGUgcXVlcnkoaW50IGxvLGludCBoaSxpbnQgcyxpbnQgZSxpbnQgaWR4KXsKCS8vaWYocz5oaSB8fCBlPGxvKXJldHVybiAwOy8vbmFzdHkuLgoJLy9pZihsbz49cyAmJiBoaTw9ZSlyZXR1cm4gc3RbaWR4XTsKCWlmKHM9PWxvICYmIGU9PWhpKQoJCXJldHVybiBzdFtpZHhdOwoJaW50IG1pZD0oKGxvK2hpKS8yKTsKCWlmKG1pZD49ZSkKCQlyZXR1cm4gcXVlcnkobG8sbWlkLHMsZSwyKmlkeCk7CgllbHNlIGlmKG1pZDxzKQoJCXJldHVybiBxdWVyeShtaWQrMSxoaSxzLGUsMippZHgrMSk7CglyZXR1cm4gY29tYmluZShxdWVyeShsbyxtaWQscyxtaWQsMippZHgpLHF1ZXJ5KG1pZCsxLGhpLG1pZCsxLGUsMippZHgrMSkpOwoJfQppbnQgbWFpbigpewoJaW50IG4scSxpOwoJLy9pbml0KDEsbiwxKTsKCXNjYW5mKCIlZCVkIiwgJm4sJnEpOwoJZm9yKGk9MDtpPHE7aSsrKXsKCQlpbnQgdHAsYSxiOwoJCXNjYW5mKCIlZCVkJWQiLCZ0cCwmYSwmYik7CgkJLy9hKz0xO2IrPTE7CgkJLy9pZih0cD09MClmbGlwKDEsbixhLGIsMSk7CgkJcHJpbnRmKCIlZFxuIiwocXVlcnkoMCxuLTEsYSxiLDEpKS5jb3VudCk7CgkJfQoJcmV0dXJuIDA7Cgl9Cg==