#include <bits/stdc++.h>
using namespace std;
ifstream f("hotel.in");
ofstream g("hotel.out");
const int N = 100002;
set<int> segm;
multiset<int> vals;
int n,p,E,tip[N],prv[N],nxt[N];
void upd(int,int,int);
inline void pushSegm(int,int),popSegm(int),pushVals(int),popVals(int),link(int,int);
int main()
{
f>>n>>p;E=n+1;
pushSegm(1,1);pushSegm(E,2);link(1,E);pushVals(1);vals.insert(0);
for(;p;p--)
{
int op,st,lg;
f>>op;
if(op==3){g<<-*vals.begin()<<'\n';}
else {f>>st>>lg;upd(st,st+lg,op);}
}
return 0;
}
void upd(int b,int c,int T)
{
int t,a,d,L,R;
t=3-T;d=*segm.upper_bound(b);a=prv[d];L=prv[a];R=nxt[d];
if(a<b)
{
if(c<d){popVals(a);pushSegm(b,t);pushSegm(c,T);link(a,b);link(b,c);link(c,d);pushVals(a);pushVals(b);pushVals(c);return;}
if(c<E){popVals(a);popVals(d);popSegm(d);pushSegm(b,t);link(a,b);link(b,R);pushVals(a);pushVals(b);return;}
popVals(a);pushSegm(b,t);link(a,b);link(b,c);pushVals(a);pushVals(b);return;
}
if(a>1)
{
if(c<d){popVals(L);popVals(a);popSegm(a);pushSegm(c,T);link(L,c);link(c,d);pushVals(L);pushVals(c);return;
}
if(c<E){popVals(L);popVals(a);popVals(d);popSegm(a);popSegm(d);link(L,R);pushVals(L);return;}
popVals(L);popVals(a);popSegm(a);link(L,c);pushVals(L);return;
}
if(c<d){popVals(a);pushSegm(b,t);pushSegm(c,T);link(b,c);link(c,d);pushVals(b);pushVals(c);return;}
if(c<E){popVals(a);popVals(d);pushSegm(b,t);popSegm(d);link(b,R);pushVals(b);return;}
popVals(a);pushSegm(b,t);pushVals(b);
}
inline void popVals(int x){if(tip[x]==1)vals.erase(vals.find(x-nxt[x]));}
inline void pushVals(int x){if(tip[x]==1)vals.insert(x-nxt[x]);}
inline void popSegm(int x){tip[x]=nxt[x]=prv[x]=0;segm.erase(x);}
inline void pushSegm(int x,int t){tip[x]=t;segm.insert(x);}
inline void link(int x,int y){nxt[x]=y;prv[y]=x;}