#include<bits/stdc++.h>
#define int long long
#define N 1000005
#define INF 1e18
using namespace std;
struct tree{
int l,r,lm,rm,v,lz;
}t[N<<1];
int n,m,op,a,b;
void push_up(int p){
t[p].v=max(max(t[p<<1].v,t[p<<1|1].v),t[p<<1].rm+t[p<<1|1].lm);
if(t[p].lm==(t[p<<1].r-t[p<<1].l+1))
t[p].lm=t[p<<1].lm+t[p<<1|1].lm;
else t[p].lm=t[p<<1].lm;
if(t[p<<1|1].rm==(t[p<<1|1].r-t[p<<1|1].l+1))
t[p].rm=t[p<<1|1].rm+t[p<<1].rm;
else t[p].rm=t[p<<1|1].rm;
}
void push_down(int p){
if(t[p].lz==-1) return;
if(t[p].lz){
t[p<<1].lm=t[p<<1].rm=t[p<<1].v=0;
t[p<<1|1].lm=t[p<<1|1].rm=t[p<<1|1].v=0;
}else{
t[p<<1].lm=t[p<<1].rm=t[p<<1].v=t[p<<1].r-t[p<<1].l+1;
t[p<<1|1].lm=t[p<<1|1].rm=t[p<<1|1].v=t[p<<1|1].r-t[p<<1|1].l+1;
}
t[p<<1].lz=t[p<<1|1].lz=t[p].lz;
t[p].lz=-1;
}
void build(int p,int l,int r){
t[p].l=l,t[p].r=r,t[p].lz=-1;
t[p].lm=t[p].rm=t[p].v=t[p].r-t[p].l+1;
if(l==r) return;
int mid=l+r>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
push_up(p);
}
void change(int p,int l,int r,int v){
push_down(p);
if(t[p].l>=l&&t[p].r<=r){
if(v){
t[p].lm=t[p].rm=t[p].v=0;
t[p].lz=1;
}else{
t[p].lm=t[p].rm=t[p].v=t[p].r-t[p].l+1;
t[p].lz=0;
}
return;
}
int mid=t[p].l+t[p].r>>1;
if(l<=mid) change(p<<1,l,r,v);
if(r>mid) change(p<<1|1,l,r,v);
push_up(p);
}
int query(int p,int x){
push_down(p);
if(t[p].l==t[p].r) return t[p].l;
if(t[p<<1].v>=x) return query(p<<1,x);
if(t[p<<1].rm+t[p<<1|1].lm>=x) return t[p<<1].r-t[p<<1].rm+1;
if(t[p<<1|1].v>=x) return query(p<<1|1,x);
return 0;
}
signed main(){
ios::sync_with_stdio(false);
cin>>n>>m;
build(1,1,n);
while(m--){
cin>>op>>a;
if(op==1){
int k=query(1,a);
cout<<k<<endl;
if(k) change(1,k,k+a-1,1);
}else{
cin>>b;
change(1,a,a+b-1,0);
}
}
return 0;
}
样例都过不去。