#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <list>
#include <map>
#include <iomanip>
#include <iostream>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <unistd.h>
#include <vector>
#include <bitset>
using namespace std;
const int N=50005,M=50005;
const int FROML=1,FROMR=2,FROMM=4,FROMLL=8,FROMRR=16;
const int SIGN1=1,SIGN0=2;
int n,m;
struct node
{
int l,r;
int ans,lans,rans;
int from;
int lazy;
inline int len()
{
return r-l+1;
}
} a[N*4];
void pushup(int p)
{
int L,R,M,maxx,LL,RR;
LL=a[p<<1].ans;
RR=a[p<<1|1].ans;
if(a[p<<1].lans==a[p<<1].len()) L=a[p<<1].lans+a[p<<1|1].lans;
else L=a[p<<1].lans;
if(a[p<<1|1].rans==a[p<<1|1].len()) R=a[p<<1|1].rans+a[p<<1].rans;
else R=a[p<<1|1].rans;
M=a[p<<1].rans+a[p<<1|1].lans;
maxx=max(max(max(L,R),max(LL,RR)),M);
a[p].ans=maxx;
a[p].lans=L;
a[p].rans=R;
a[p].from=0;
if(maxx==L) a[p].from|=FROML;
if(maxx==R) a[p].from|=FROMR;
if(maxx==M) a[p].from|=FROMM;
if(maxx==LL) a[p].from|=FROMLL;
if(maxx==RR) a[p].from|=FROMRR;
a[p].lazy=0;
}
void build(int p,int l,int r)
{
a[p].l=l;
a[p].r=r;
if(r==l)
{
a[p].ans=a[p].lans=a[p].rans=1;
a[p].lazy=0;
a[p].from=7;
return;
}
int mid=(l+r)/2;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
pushup(p);
}
void pushdown(int p)
{
if(a[p].lazy==SIGN0)
{
a[p].lazy=0;
a[p<<1].lazy=SIGN0;
a[p<<1|1].lazy=SIGN0;
a[p<<1].ans=a[p<<1].lans=a[p<<1].rans=a[p<<1].len();
a[p<<1].from=7;
a[p<<1|1].ans=a[p<<1|1].lans=a[p<<1|1].rans=a[p<<1|1].len();
a[p<<1|1].from=7;
}
if(a[p].lazy==SIGN1)
{
a[p].lazy=0;
a[p<<1].lazy=SIGN1;
a[p<<1|1].lazy=SIGN1;
a[p<<1].ans=a[p<<1].lans=a[p<<1].rans=0;
a[p<<1].from=7;
a[p<<1|1].ans=a[p<<1|1].lans=a[p<<1|1].rans=0;
a[p<<1|1].from=7;
}
}
void sign(int p,int l,int r,int x)
{
pushdown(p);
if(l<=a[p].l&&a[p].r<=r)
{
if(x==1)
{
a[p].ans=a[p].lans=a[p].rans=0;
a[p].lazy=SIGN1;
}
else
{
a[p].ans=a[p].lans=a[p].rans=a[p].len();
a[p].lazy=SIGN0;
}
return;
}
int mid=(a[p].l+a[p].r)/2;
if(l<=mid) sign(p<<1,l,r,x);
if(mid+1<=r) sign(p<<1|1,l,r,x);
pushup(p);
}
int findsign1(int p,int x)
{
if(a[p].len()==1)
{
return a[p].l;
}
pushdown(p);
int mid=(a[p].l+a[p].r)/2;
if(a[p<<1].ans>=x)
return findsign1(p<<1,x);
else if(a[p<<1].rans+a[p<<1|1].lans>=x)
return mid-a[p<<1].rans+1;
else
return findsign1(p<<1|1,x);
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
build(1,1,n);
for(int i=1;i<=m;i++)
{
int op,x,y;
cin>>op>>x;
if(op==1)
if(a[1].ans<x)
{
cout<<"0\n";
continue;
}
else
{
cout<<findsign1(1,x)<<'\n';
sign(1,findsign1(1,x),findsign1(1,x)+x-1,1);
}
else
{
cin>>y;
sign(1,x,x+y-1,0);
}
}
return 0;
}