#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=5e4+5;
int n,m,ans;
struct segment{
int l,r,sum,lsum,rsum,tag;
#define l(x) tree[x].l
#define r(x) tree[x].r
#define sum(x) tree[x].sum
#define lsum(x) tree[x].lsum
#define rsum(x) tree[x].rsum
#define tag(x) tree[x].tag
}tree[N<<2];
void build(int p,int l,int r)
{
l(p)=l;r(p)=r;
if(l==r){
sum(p)=lsum(p)=rsum(p)=1;
return;
}
int mid=(l+r)>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
sum(p)=lsum(p)=rsum(p)=sum(p<<1)+sum(p<<1|1);
}
void pushdown(int p)
{
if(tag(p)==1){
tag(p)=0;
tag(p<<1)=tag(p<<1|1)=1;
sum(p<<1)=lsum(p<<1)=rsum(p<<1)=0;
sum(p<<1|1)=lsum(p<<1|1)=rsum(p<<1|1)=0;
}
else if(tag(p)==2){
tag(p)=0;
tag(p<<1)=tag(p<<1|1)=2;
sum(p<<1)=lsum(p<<1)=rsum(p<<1)=r(p<<1)-l(p<<1)+1;
sum(p<<1|1)=lsum(p<<1|1)=rsum(p<<1|1)=r(p<<1|1)-l(p<<1|1)+1;
}
}
void pushup(int p)
{
sum(p)=max(max(sum(p<<1),sum(p<<1|1)),rsum(p<<1)+lsum(p<<1|1));
lsum(p)=lsum(p<<1)+(lsum(p<<1)==sum(p<<1)&&sum(p<<1))*lsum(p<<1|1);
rsum(p)=rsum(p<<1|1)+(rsum(p<<1|1)==sum(p<<1|1)&&sum(p<<1|1))*rsum(p<<1);
}
int ask(int p,int k)
{
if(sum(p)==r(p)-l(p)+1&&sum(p)==k) return l(p);
pushdown(p);
if(sum(p<<1)>=k) return ask(p<<1,k);
else if(rsum(p<<1)+lsum(p<<1|1)>=k){
return r(p<<1)-rsum(p<<1)+1;
}
else if(sum(p<<1|1)>=k) return ask(p<<1|1,k);
pushup(p);
}
void change(int p,int l,int r,int flag)
{
if(l<=l(p)&&r(p)<=r){
if(flag==1) sum(p)=lsum(p)=rsum(p)=0;
else if(flag==2) sum(p)=lsum(p)=rsum(p)=r(p)-l(p)+1;
tag(p)=flag;return;
}
pushdown(p);
int mid=(l(p)+r(p))>>1;
if(l<=mid) change(p<<1,l,r,flag);
if(r>mid) change(p<<1|1,l,r,flag);
pushup(p);
}
int main()
{
cin>>n>>m;
build(1,1,n);
while(m--){
int opt,x,y;
scanf("%d",&opt);
if(opt==1){
scanf("%d",&y);
if(sum(1)>=y){
x=ask(1,y),y=x+y-1;
printf("%d\n",x);
change(1,x,y,1);
}
else puts("0");
}
else {
scanf("%d%d",&x,&y);
change(1,x,x+y-1,2);
}
}
return 0;
}