program aib;
var A : array [1..300000] of longint;
B : array [1..100000] of longint;
i,n,m,S,p1,p2,j : longint;
x : shortint;
f,g : text;
procedure update(nod,l,r,poz,val:longint);
var mij : longint;
begin
if r=l then A[nod] := A[nod]+val
else begin
mij := (r+l) div 2;
if poz<=mij then update(2*nod,l,mij,poz,val)
else update(2*nod+1,mij+1,r,poz,val);
A[nod] := A[2*nod]+A[2*nod+1];
end;
end;
procedure query(nod,l,r,p1,p2:longint);
var mij : longint;
begin
if (p1<=l) and (r<=p2) then S := S+A[nod]
else begin
mij := (r+l) div 2;
if p1<=mij then query(2*nod,l,mij,p1,p2);
if mij<p2 then query(2*nod+1,mij+1,r,p1,p2);
end;
end;
begin
assign(f,'aib.in');
reset(f);
assign(g,'aib.out');
rewrite(g);
readln(f,n,m);
for i := 1 to n do A[i] := 0;
for i := 1 to n do begin
read(f,B[i]);
update(1,1,n,i,B[i]);
end;
readln(f);
for i := 1 to m do begin
read(f,x);
case x of
0: begin
readln(f,p1,p2);
update(1,1,n,p1,p2);
B[p1] := B[p1]+p2;
end;
1: begin
readln(f,p1,p2);
S := 0;
query(1,1,n,p1,p2);
writeln(g,S);
end;
2: begin
readln(f,p1);
S := 0;
j := 0;
repeat
j := j+1;
S := S+B[j];
until S>=p1;
if S=p1 then writeln(g,j)
else writeln(g,'-1');
end;
end;
end;
close(f);
close(g);
end.