// segfill - https://o...content-available-to-author-only...i.info/problem/tinhyeumangtheo_segfill
#include<iostream>
using namespace std;
#define ll long long
const ll maxn=100000;
ll max(const ll& a,const ll& b){return(a>b)?a:b;}
ll min(const ll& a,const ll& b){return(a<b)?a:b;}
struct node{ll val=0,laz=-1;}st[4*maxn+5];
ll n,q,t,l,r;
void dd(ll id,ll l,ll r){ // hàm down
if(st[id].laz==-1){return;}
ll t=st[id].laz,m=l+r>>1;
st[2*id].val=t*(m-l+1);
st[2*id].laz=t;
st[2*id+1].val=t*(r-m);
st[2*id+1].laz=t;
st[id].laz=-1;
}
void upd(ll id,ll l,ll r,ll u,ll v,ll val){ // hàm update
if(u>r||v<l){return;}
if(u<=l&&v>=r){
st[id].val=val*(r-l+1);st[id].laz=val;
return;
}
dd(id,l,r);
ll m=l+r>>1;
upd(2*id,l,m,u,v,val);
upd(2*id+1,m+1,r,u,v,val);
st[id].val=st[2*id].val+st[2*id+1].val;
}
ll quer(ll id,ll l,ll r,ll u,ll v){ // hàm query
if(u>r||v<l){return 0;}
if(u<=l&&v>=r){return st[id].val;}
dd(id,l,r);
ll m=l+r>>1;
return quer(2*id,l,m,u,v)+quer(2*id+1,m+1,r,u,v);
}
int main(){
cin.tie(0)->sync_with_stdio(0);
cin>>n>>q;
while(q--){
cin>>t>>l>>r;
if(t==1){
upd(1,1,n,l,r,1);
}else if(t==0){
upd(1,1,n,l,r,0);
}else{
cout<<quer(1,1,n,l,r)<<"\n";
}
}
}
Ly8gc2VnZmlsbCAtIGh0dHBzOi8vby4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uaS5pbmZvL3Byb2JsZW0vdGluaHlldW1hbmd0aGVvX3NlZ2ZpbGwKI2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCmNvbnN0IGxsIG1heG49MTAwMDAwOwpsbCBtYXgoY29uc3QgbGwmIGEsY29uc3QgbGwmIGIpe3JldHVybihhPmIpP2E6Yjt9CmxsIG1pbihjb25zdCBsbCYgYSxjb25zdCBsbCYgYil7cmV0dXJuKGE8Yik/YTpiO30Kc3RydWN0IG5vZGV7bGwgdmFsPTAsbGF6PS0xO31zdFs0Km1heG4rNV07CmxsIG4scSx0LGwscjsKdm9pZCBkZChsbCBpZCxsbCBsLGxsIHIpeyAvLyBow6BtIGRvd24gCiAgaWYoc3RbaWRdLmxhej09LTEpe3JldHVybjt9CiAgbGwgdD1zdFtpZF0ubGF6LG09bCtyPj4xOwogIHN0WzIqaWRdLnZhbD10KihtLWwrMSk7CiAgc3RbMippZF0ubGF6PXQ7CiAgc3RbMippZCsxXS52YWw9dCooci1tKTsKICBzdFsyKmlkKzFdLmxhej10OwogIHN0W2lkXS5sYXo9LTE7Cn0Kdm9pZCB1cGQobGwgaWQsbGwgbCxsbCByLGxsIHUsbGwgdixsbCB2YWwpeyAvLyBow6BtIHVwZGF0ZQogIGlmKHU+cnx8djxsKXtyZXR1cm47fQogIGlmKHU8PWwmJnY+PXIpewogICAgc3RbaWRdLnZhbD12YWwqKHItbCsxKTtzdFtpZF0ubGF6PXZhbDsKICAgIHJldHVybjsKICB9CiAgZGQoaWQsbCxyKTsKICBsbCBtPWwrcj4+MTsKICB1cGQoMippZCxsLG0sdSx2LHZhbCk7CiAgdXBkKDIqaWQrMSxtKzEscix1LHYsdmFsKTsKICBzdFtpZF0udmFsPXN0WzIqaWRdLnZhbCtzdFsyKmlkKzFdLnZhbDsKfQpsbCBxdWVyKGxsIGlkLGxsIGwsbGwgcixsbCB1LGxsIHYpeyAvLyBow6BtIHF1ZXJ5CiAgaWYodT5yfHx2PGwpe3JldHVybiAwO30KICBpZih1PD1sJiZ2Pj1yKXtyZXR1cm4gc3RbaWRdLnZhbDt9CiAgZGQoaWQsbCxyKTsKICBsbCBtPWwrcj4+MTsKICByZXR1cm4gcXVlcigyKmlkLGwsbSx1LHYpK3F1ZXIoMippZCsxLG0rMSxyLHUsdik7Cn0KaW50IG1haW4oKXsKICBjaW4udGllKDApLT5zeW5jX3dpdGhfc3RkaW8oMCk7CiAgY2luPj5uPj5xOwogIHdoaWxlKHEtLSl7CiAgICBjaW4+PnQ+Pmw+PnI7CiAgICBpZih0PT0xKXsKICAgICAgdXBkKDEsMSxuLGwsciwxKTsKICAgIH1lbHNlIGlmKHQ9PTApewogICAgICB1cGQoMSwxLG4sbCxyLDApOwogICAgfWVsc2V7CiAgICAgIGNvdXQ8PHF1ZXIoMSwxLG4sbCxyKTw8IlxuIjsKICAgIH0KICB9Cn0K