#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{
ll len,num,lnum,rnum,tag;
}a[200030];
void pushup(ll x){
a[x].lnum=a[x*2].lnum;
if(a[x*2].lnum==a[x*2].len) a[x].lnum=a[x*2+1].lnum+a[x*2].num;
a[x].rnum=a[x*2+1].rnum;
if(a[x*2+1].rnum==a[x*2+1].len) a[x].rnum=a[x*2+1].num+a[x*2].rnum;
a[x].num=a[x*2].rnum+a[x*2+1].lnum;
a[x].num=max(a[x].num,a[x*2].lnum);
a[x].num=max(a[x].num,a[x*2+1].rnum);
}void build(ll x,ll l,ll r){
a[x].len=r-l+1;
if(l==r){
a[x].num=a[x].lnum=a[x].rnum=1;
return ;
}ll mid=(l+r)/2;
build(x*2,l,mid);
build(x*2+1,mid+1,r);
pushup(x);
}void Tag(ll x,ll l,ll r,ll tag){
if(tag==1){
a[x].num=a[x].lnum=a[x].rnum=0;
a[x].tag=1;
}else{
a[x].num=a[x].lnum=a[x].rnum=r-l+1;
a[x].tag=2;
}
}void pushdown(ll x,ll l,ll r){
if(a[x].tag==0) return ;
ll mid=(l+r)/2;
Tag(x*2,l,mid,a[x].tag);
Tag(x*2+1,mid+1,r,a[x].tag);
a[x].tag=0;
}ll query(ll x,ll l,ll r,ll k){
if(a[x].num<k) return 0;
if(l==r) return l;
ll mid=(l+r)/2;
pushdown(x,l,r);
if(a[x*2].num>=k) return query(x*2,l,mid,k);
if(a[x*2].rnum+a[x*2+1].lnum>=k) return mid+1-a[x*2].rnum;
return query(x*2+1,mid+1,r,k);
}void checkIn(ll x,ll l,ll r,ll L,ll R){
if(L<=l&&r<=R){
a[x].num=a[x].lnum=a[x].rnum=0;
a[x].tag=1;
return ;
}pushdown(x,l,r);
ll mid=(l+r)/2;
if(L<=mid) checkIn(x*2,l,mid,L,R);
if(mid<R) checkIn(x*2+1,mid+1,r,L,R);
pushup(x);
}void checkOut(ll x,ll l,ll r,ll L,ll R){
if(L<=l&&r<=R){
a[x].num=a[x].lnum=a[x].rnum=r-l+1;
a[x].tag=2;
return ;
}pushdown(x,l,r);
ll mid=(l+r)/2;
if(L<=mid) checkOut(x*2,l,mid,L,R);
if(mid<R) checkOut(x*2+1,mid+1,r,L,R);
pushup(x);
}
ll n,m,opt,x,y;
int main(){
cin>>n>>m;
build(1,1,n);
for(int i=1;i<=m;i++){
cin>>opt;
if(opt==1){
cin>>x;
ll pos= query(1,1,n,x);
cout<<pos<<endl;
if(pos!=0) checkIn(1,1,n,pos,pos+x-1);
}else{
cin>>x>>y;
checkOut(1,1,n,x,x+y-1);
}
}
return 0;
}