rt
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n, m, ans[400005], lx[400005], rx[400005], tag[400005];
void pushup(int cur, int lt, int rt){
int mid = lt + rt >> 1;
if(ans[cur << 1] == mid - lt + 1){
lx[cur] = ans[cur << 1] + lx[cur << 1 | 1];
}
else{
lx[cur] = lx[cur << 1];
}
if(ans[cur << 1 | 1] == rt - mid){
rx[cur] = ans[cur << 1 | 1] + rx[cur << 1];
}
else{
rx[cur] = rx[cur << 1 | 1];
}
ans[cur] = max({ans[cur << 1], ans[cur << 1 | 1], lx[cur << 1 | 1] + rx[cur << 1]});
}
void lazytag(int cur, int lt, int rt, int x, int y, int z){
tag[cur << 1] = tag[cur << 1 | 1] = x;
ans[cur << 1] = lx[cur << 1] = rx[cur << 1] = y;
ans[cur << 1 | 1] = lx[cur << 1 | 1] = rx[cur << 1 | 1] = z;
}
void pushdown(int cur, int lt, int rt){
if(tag[cur] == 0){
return;
}
if(tag[cur] == 1){
lazytag(cur, lt, rt, 1, 0, 0);
}
if(tag[cur] == 2){
int mid = lt + rt >> 1;
lazytag(cur, lt, rt, 2, mid - lt + 1, rt - mid);
}
tag[cur] = 0;
}
void build(int cur, int lt, int rt){
lx[cur] = rx[cur] = ans[cur] = rt - lt + 1;
if(lt == rt){
return;
}
int mid = lt + rt >> 1;
build(cur << 1, lt, mid);
build(cur << 1 | 1, mid + 1, rt);
}
void update(int cur, int lt, int rt, int qx, int qy, int val){
pushdown(cur, lt, rt);
if(qy <= lt || rt <= qx){
return;
}
if(qx <= lt && rt <= qy){
int x = 0;
if(val != 1){
x = rt - lt + 1;
}
ans[cur] = lx[cur] = rx[cur] = x;
tag[cur] = val;
return;
}
int mid = lt + rt >> 1;
update(cur << 1, lt, mid, qx, qy, val);
update(cur << 1 | 1, mid + 1, rt, qx, qy, val);
pushup(cur, lt, rt);
}
int query(int cur, int lt, int rt, int kri){
pushdown(cur, lt, rt);
if(lt == rt){
return lt;
}
int mid = lt + rt >> 1;
if(ans[cur << 1] >= kri){
return query(cur << 1, lt, mid, kri);
}
if(rx[cur << 1] + lx[cur << 1 | 1] < kri){
return query(cur << 1 | 1, mid + 1, rt, kri);
}
return mid - rx[cur << 1] + 1;
}
signed main(){
cin >> n >> m;
build(1, 1, n);
while(m--){
int op;
cin >> op;
if(op == 1){
int x;
cin >> x;
if(ans[1] >= x){
int y = query(1, 1, n, x);
cout << y << "\n";
update(1, 1, n, y, y + x - 1, 1);
}
else{
cout << 0 << "\n";
}
}
else{
int x, y;
cin >> x >> y;
update(1, 1, n, x, x + y - 1, 2);
}
}
return 0;
}