1 #include<iostream>
2 #include<cstdio>
3 #include<cstdlib>
4 #include<cstring>
5 #include<algorithm>
6 #include<cmath>
7 using namespace std;
8 typedef long long LL;
9 const int maxn=50010;
10 struct node{
11 int l,r;
12 int ls,rs;
13 int maxlen,llen,rlen;
14 int lazy;
15 }seg[maxn*10];
16 int N,M;
17 int tot=1;
18 void updata_down(int rt){
19 if(seg[rt].lazy==-1) return ;
20 int d=seg[rt].lazy;
21 int lson=seg[rt].ls; int rson=seg[rt].rs;
22 seg[lson].maxlen=seg[lson].llen=seg[lson].rlen=(seg[lson].r-seg[lson].l+1)*d;
23 seg[rson].maxlen=seg[rson].llen=seg[rson].rlen=(seg[rson].r-seg[rson].l+1)*d;
24 seg[lson].lazy=seg[rson].lazy=seg[rt].lazy;
25 seg[rt].lazy=-1;
26 }
27 void updata_up(int rt){
28 int lson=seg[rt].ls; int rson=seg[rt].rs;
29 seg[rt].maxlen=max(seg[lson].maxlen,max(seg[rson].maxlen,seg[lson].rlen+seg[rson].llen));
30 if(seg[lson].llen==seg[lson].r-seg[lson].l+1) seg[rt].llen=seg[lson].llen+seg[rson].llen;
31 else seg[rt].llen=seg[lson].llen;
32 if(seg[rson].rlen==seg[rson].r-seg[rson].l+1) seg[rt].rlen=seg[rson].rlen+seg[lson].rlen;
33 else seg[rt].rlen=seg[rson].rlen;
34 }
35 void Build(int rt,int l,int r){
36 seg[rt].l=l; seg[rt].r=r;
37 seg[rt].maxlen=seg[rt].llen=seg[rt].rlen=(r-l+1);
38 seg[rt].lazy=-1;
39 if(l==r) return ;
40 int mid=(l+r)>>1;
41 tot++; seg[rt].ls=tot; Build(seg[rt].ls,l,mid);
42 tot++; seg[rt].rs=tot; Build(seg[rt].rs,mid+1,r);
43 }
44 int query(int rt,int Len){
45 updata_down(rt);
46 int lson=seg[rt].ls; int rson=seg[rt].rs;
47 if(seg[rt].maxlen<Len) return 0;
48 if(seg[rt].r-seg[rt].l+1==Len) return seg[rt].l;
49 if(seg[lson].maxlen>=Len) return query(lson,Len);
50 if(seg[lson].rlen+seg[rson].llen>=Len) return seg[lson].r-seg[lson].rlen+1;
51 return query(rson,Len);
52 }
53 void change(int rt,int l,int r,int k){
54 updata_down(rt);
55 if(l<=seg[rt].l&&seg[rt].r<=r){
56 seg[rt].maxlen=seg[rt].llen=seg[rt].rlen=(seg[rt].r-seg[rt].l+1)*k;
57 seg[rt].lazy=k;
58 return ;
59 }
60 int lson=seg[rt].ls; int rson=seg[rt].rs;
61 int mid=(seg[rt].l+seg[rt].r)>>1;
62 if(l<=mid) change(lson,l,r,k);
63 if(mid+1<=r) change(rson,l,r,k);
64 updata_up(rt);
65 }
66 int main(){
67 scanf("%d%d",&N,&M);
68 Build(1,1,N);
69 int k,x,y;
70 while(M--){
71 scanf("%d",&k);
72 if(k==1){
73 scanf("%d",&x);
74 if(x>seg[1].maxlen) printf("0\n");
75 else{
76 y=query(1,x);
77 printf("%d\n",y);
78 change(1,y,y+x-1,0);
79 }
80 }
81 else{
82 scanf("%d%d",&x,&y);
83 change(1,x,x+y-1,1);
84 }
85 }
86 return 0;
87 }