#include <bits/stdc++.h>
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
int i,n,v[100005],a[500000],m,st2,dr2,apref[500000],asuf[500000],Max,p,mark[500000];
void build(int nod, int st, int dr){
if(st == dr){
a[nod] = -1;
return;
}
int mij = (st + dr) >> 1;
build(2*nod,st,mij);
build(2*nod+1,mij+1,dr);
Max = 0;
Max = dr - st + 1;
}
void update(int nod, int st, int dr, int st1, int dr1){
int mij = (st + dr) >> 1;
if(st == dr && st >= st2 && dr <= dr2 && !mark[nod]){
apref[nod] = 0;
asuf[nod] = 0;
a[nod] = 0;
mark[nod] = 1;
return;
}
else if(st == dr && !mark[nod]){
// fout << st << " " << dr << endl;
apref[nod] = 1;
asuf[nod] = 1;
a[nod] = 1;
return;
}
if(st == dr){
return;
}
else{
update(2*nod,st,mij,st1,dr1);
update(2*nod+1,mij+1,dr,st1,dr1);
if(apref[2*nod+1]==dr-mij && asuf[2*nod+1]==dr-mij)
apref[nod] = apref[2*nod+1] + apref[2*nod];
else
apref[nod] = apref[2*nod+1];
if(asuf[2*nod] == mij-st+1 && apref[2*nod]==mij-st+1)
asuf[nod] = asuf[2*nod+1] + asuf[2*nod];
else
asuf[nod] = asuf[2*nod];
a[nod] = max(max(a[2*nod],a[2*nod+1]),apref[2*nod]+asuf[2*nod+1]);
Max = 0;
Max = max(Max,a[nod]);
}
}
void update2(int nod, int st, int dr, int st1, int dr1){
int mij = (st + dr) >> 1;
if(st == dr && st >= st1 && dr <= dr1 && !a[nod]){
apref[nod] = 1;
asuf[nod] = 1;
a[nod] = 1;
return;
}
else if(st == dr)
return;
else{
update2(2*nod,st,mij,st1,dr1);
update2(2*nod+1,mij+1,dr,st1,dr1);
if(apref[2*nod+1]==dr-mij && asuf[2*nod+1]==dr-mij)
apref[nod] = apref[2*nod+1] + apref[2*nod];
else
apref[nod] = apref[2*nod+1];
if(asuf[2*nod] == mij-st+1 && apref[2*nod]==mij-st+1)
asuf[nod] = asuf[2*nod+1] + asuf[2*nod];
else
asuf[nod] = asuf[2*nod];
a[nod] = max(max(a[2*nod],a[2*nod+1]),apref[2*nod]+asuf[2*nod+1]);
Max = 0;
Max = max(Max,a[nod]);
}
}
int main()
{
fin>>n>>m;
build(1,1,n);
for(i=1;i<=m;i++){
fin>>p;
if(p == 1){
fin>>st2>>dr2;
dr2 = st2 + dr2 - 1;
Max = 0;
update(1,1,n,st2,dr2);
//fout << Max << '\n';
}
else if(p == 2){
fin>>st2>>dr2;
dr2 = st2 + dr2 - 1;
Max = 0;
update2(1,1,n,st2,dr2);
}
else
fout << Max << '\n';
}
return 0;
}