program datorii;
var bufin,bufout:array[1..100000] of byte;
n,m,i,op,x,y:longint;
a:array[1..15000] of longint;
t:array[1..60000] of longint;
function min(u,v:longint):longint;
begin
if u>v then min:=v else min:=u;
end;
function max(u,v:longint):longint;
begin
if u<v then max:=v else max:=u;
end;
procedure build(nod,tl,tr:longint);
var tm:longint;
begin
if tl=tr then t[nod]:=a[tl] else
begin
tm:=(tl+tr) shr 1;
build(nod shl 1,tl, tm);
build(nod shl 1+1,tm+1,tr);
t[nod]:=t[nod shl 1]+t[nod shl 1+1];
end;
end;
procedure update(nod,tl,tr,pos,val:longint);
var tm:longint;
begin
if tl=tr then t[nod]:=t[nod]-val else
begin
tm:=(tl+tr) shr 1;
if pos<=tm then update(nod shl 1,tl,tm,pos,val)
else update(nod shl 1+1,tm+1,tr,pos,val);
t[nod]:=t[nod]-val;
end;
end;
function query(nod,tl,tr,l,r:longint):longint;
var tm:longint;
begin
if l>r then query:=0 else
if (l=tl)and(r=tr) then query:=t[nod] else
begin
tm:=(tl+tr)shr 1;
query:=query(nod shl 1,tl,tm,l,min(r,tm))+
query(nod shl 1+1,tm+1,tr,max(tm+1,l),r);
end;
end;
begin
assign(input,'datorii.in');
reset(input);
settextbuf(input,bufin);
assign(output,'datorii.out');
rewrite(output);
settextbuf(output,bufout);
readln(n,m);
for i:=1 to n do read(a[i]); readln;
build(1,1,n);
for i:=1 to m do
begin
readln(op,x,y);
if op=0 then update(1,1,n,x,y)
else writeln(query(1,1,n,x,y));
end;
close(output);
end.