#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];
inline void elim(int x){nxt[prv[x]]=nxt[x];prv[nxt[x]]=prv[x];nxt[x]=prv[x]=tip[x]=0;segm.erase(x);}
inline void pune(int x,int dr){int st=prv[dr];nxt[st]=prv[dr]=x;prv[x]=st;nxt[x]=dr;segm.insert(x);}
void remake(int st,int dr,vector<int> A,int sgn)
{
for(int x=st;x!=dr;x=nxt[x])if(tip[x]==1)vals.erase(vals.find(x-nxt[x]));
while(nxt[st]!=dr)elim(nxt[st]);
for(auto poz:A)pune(poz,dr);
tip[st]=sgn*tip[st];
for(;st!=dr;st=nxt[st]){if(tip[st]==1)vals.insert(st-nxt[st]);tip[nxt[st]]=-tip[st];}
}
void upd(int B,int C)
{
int A,D,L,R;
D=*segm.upper_bound(B);A=prv[D];L=A<B?0:A==1?0:prv[A];R=C<D?0:D==E?0:nxt[D];
if(A<B){if(C<D)remake(A,D,{B,C},1);else if(C<E)remake(A,R,{B},1);else remake(A,E,{B},1);}
else if(A>1){if(C<D)remake(L,D,{C},1);else if(C<E)remake(L,R,{},1);else remake(L,E,{},1);}
else{if(C<D)remake(1,D,{C},-1);else if(C<E)remake(1,R,{},-1);else remake(1,E,{},-1);}
}
int main()
{
f>>n>>p;E=n+1;segm.insert(1);segm.insert(E);nxt[1]=E;prv[E]=1;tip[1]=1;tip[E]=-1;vals.insert(-n);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);}}
return 0;
}