#include <bits/stdc++.h>
using namespace std;
int n, m;
struct house{
int l, r, sum, lmax, rmax, tag;
}tree[200001];
void build(int p,int l,int r){
tree[p].l=l; tree[p].r=r;
tree[p].sum=r-l+1; tree[p].lmax=r-l+1;
tree[p].rmax=r-l+1; tree[p].tag=0;
if (l==r) return ;
int mid=l+r>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
}
void spread(int x){
if (!tree[x].tag) return ;
if (tree[x].tag == 1){
tree[x<<1].tag = tree[x<<1|1].tag = 1;
tree[x<<1].sum=tree[x<<1].lmax=tree[x<<1].rmax=0;
tree[x<<1|1].sum=tree[x<<1|1].lmax=tree[x<<1|1].rmax=0;
}
if (tree[x].tag == 2){
tree[x<<1].tag = tree[x<<1|1].tag = 2;
tree[x<<1].sum=tree[x<<1].lmax=tree[x<<1].rmax=tree[x<<1].r-tree[x<<1].l+1;
tree[x<<1|1].sum=tree[x<<1|1].lmax=tree[x<<1|1].rmax=tree[x<<1|1].r-tree[x<<1|1].l+1;
}
tree[x].tag=0;
}
void renew(int x){
if (tree[x<<1].r-tree[x<<1].l+1 == tree[x<<1].sum) tree[x].lmax = tree[x<<1].sum + tree[x<<1|1].lmax;
else tree[x].lmax=tree[x<<1].lmax;
if (tree[x<<1|1].r-tree[x<<1|1].l+1 == tree[x<<1|1].sum) tree[x].rmax = tree[x<<1|1].sum + tree[x<<1].rmax;
else tree[x].rmax=tree[x<<1|1].rmax;
tree[x].sum = max(max(tree[x<<1].sum,tree[x<<1|1].sum),tree[x<<1].rmax+tree[x>>1|1].lmax);
}
void change(int p,int l,int r,int tag,int L,int R){
spread(p);
if (l >= L && r <= R){
if (tag == 1){
tree[p].sum=tree[p].lmax=tree[p].rmax=0;
}
if (tag == 2){
tree[p].sum=tree[p].lmax=tree[p].rmax=tree[p].r-tree[p].l+1;
}
tree[p].tag = tag;
return ;
}
int mid=l+r>>1;
if (L <= mid) change(p<<1,l,mid,tag,L,R);
if (R > mid) change(p<<1|1,mid+1,r,tag,L,R);
renew(p);
}
int query(int p,int l,int r,int lenth){
spread(p);
if (l==r) return l;
int num1 = tree[p<<1].sum, num2 = tree[p<<1|1].sum, num3 = tree[p<<1].rmax+tree[p<<1|1].lmax;
int mid = l+r>>1;
if (num1 >= lenth) return query(p<<1,l,mid,lenth);
else if (num3 >= lenth) return mid - tree[p<<1].rmax + 1;
else return query(p<<1|1,mid+1,r,lenth);
}
int main(){
cin >> n >> m;
build(1,1,n);
for (int i = 0;i < m;i ++){
int op;
cin >> op;
if (op == 1){
int le;
cin >> le;
if (tree[1].sum < le) cout << 0 << endl;
else{
int l = query(1,1,n,le);
cout << l << endl;
change(1,1,n,1,l,l+le-1);
}
}
if (op == 2){
int a,b;
cin >> a;
cin >> b;
change(1,1,n,2,a,a+b-1);
}
}
return 0;
}