#include using namespace std; class SegTree { public: SegTree(int height){ mN = 1 << height; mpNode = new char[mN*2-1]; memset( mpNode, 0, mN*2-1 ); } ~SegTree() { delete[] mpNode; } void fill( int l, int r, int v ){ fill( l, r, v, 0, 0, mN ); } int count( int l, int r, int v ){ return count( l, r, v, 0, 0, mN ); } private: char * mpNode; int mN; void fill( int l, int r, int v, int ni, int nl, int w ) { char * p = mpNode + ni; if( v == *p ) { return; } if( l == nl && r == nl+w-1 ) { *p = v; return; } char * c0 = mpNode + (ni*2+1); char * c1 = c0 + 1; if( *p >= 0 ) { *c0 = *p; *c1 = *p; *p = -1; } if( l < nl+w/2 ) { fill( l, min(nl+w/2-1,r), v, ni*2+1, nl, w/2 ); } if( r >= nl+w/2 ) { fill( max(l,nl+w/2), r, v, ni*2+2, nl+w/2, w/2 ); } if( *c0 == *c1 ) { *p = *c0; } } int count( int l, int r, int v, int ni, int nl, int w ) { char * p = mpNode + ni; if( *p >= 0 ) { return *p == v ? r-l+1 : 0; } else { int result = 0; if( l < nl+w/2 ) { result += count( l, min(nl+w/2-1,r), v, ni*2+1, nl, w/2 ); } if( r >= nl+w/2 ) { result += count( max(l,nl+w/2), r, v, ni*2+2, nl+w/2, w/2 ); } return result; } } }; int N,Q; int main() { cin >> N >> Q; long long a=0,b=0; SegTree st(18); for(int i=0; i> x >> l >> r; if(x==0){ int ta = st.count(l,r,1); int tb = st.count(l,r,2); if(ta>tb) a+=ta; if(ta