#include using ll=long long int; using P=std::pair; constexpr int MAX_N=(1<<20); int n,q; int diff[MAX_N*2-1],cnt[MAX_N*2-1]; int lazy[MAX_N*2-1]; void init(int _n) { n=1; while(n<_n) n*=2; } void eval(int k,int l,int r){ if(lazy[k]==0) return; if(r-l>1) lazy[k*2+1]=lazy[k*2+2]=lazy[k]/2; diff[k]=lazy[k]; cnt[k]=r-l; lazy[k]=0; } void update(int a,int b,int v,int k,int l,int r) { eval(k,l,r); if(b<=l||r<=a) return; if(a<=l&&r<=b){ lazy[k]=v*(r-l); eval(k,l,r); return; } update(a,b,v,k*2+1,l,(l+r)/2); update(a,b,v,k*2+2,(l+r)/2,r); diff[k]=diff[k*2+1]+diff[k*2+2]; cnt[k]=cnt[k*2+1]+cnt[k*2+2]; } P operator+ (const P& lhs,const P& rhs){ return P(lhs.first+rhs.first,lhs.second+rhs.second); } P query(int a,int b,int k,int l,int r){ eval(k,l,r); if(b<=l||r<=a) return P(0,0); if(a<=l&&r<=b) return P(diff[k],cnt[k]); return query(a,b,k*2+1,l,(l+r)/2)+query(a,b,k*2+2,(l+r)/2,r); } int main() { std::cin>>n>>q; init(n); ll a=0,b=0; int x,l,r; for(int i=0;i>x>>l>>r; if(x==0){ P p=query(l,r+1,0,0,n); if(p.first>0) b+=(p.second+p.first)/2; else if(p.first<0) a+=(p.second-p.first)/2; } else if(x==1) update(l,r+1,-1,0,0,n); else update(l,r+1,1,0,0,n); } P p=query(0,n,0,0,n); a+=(p.second-p.first)/2; b+=(p.second+p.first)/2; std::cout<