program datorii; {N<15000 M<100000}
var v:array[1..45000]of longint;
n,m:longint;
z,a,b:longint;
i:longint;
f,g:text;
function maxim(a,b:longint):longint;
begin
maxim:=(a+b+abs(a-b))shr 1;
end;
function minim(a,b:longint):longint;
begin
minim:=(a+b-abs(a-b)shr 1);
end;
procedure update(n,st,dr,poz,val:longint);
var mij:longint;
begin
if(st=dr)then v[n]:=v[n]+val
else begin
mij:=(st+dr) shr 1;
if poz<=mij then update(n shl 1,st,mij,poz,val);
if poz>mij then update(n shl 1 +1,mij+1,dr,poz,val);
v[n]:=v[n shl 1]+v[n shl 1 +1];
end;
end;
function query(n,st,dr,a,b:longint):longint;
var mij:longint;
ll,rr:longint;
begin
if (a<=st)and(dr<=b) then query:=v[n]
else begin
mij:=(st+dr) shr 1;
ll:=0;rr:=0;
if a<=mij then ll:=query(n shl 1,st,mij,a,minim(mij,b));
if b>mij then rr:=query(n shl 1 +1,mij+1,dr,maxim(a,mij),b);
query:=ll+rr;
end;
end;
procedure read_input;
var val:longint;
begin
for i:=1 to n do begin
read(f,val);
update(1,1,n,i,val);
end;
end;
begin
assign(f,'datorii.in');reset(f);
assign(g,'datorii.out');rewrite(g);
readln(f,n,m);
read_input;
for i:=1 to m do begin
readln(f,z,a,b);
if z=0 then update(1,1,n,a,-b)
else writeln(g,query(1,1,n,a,b));
end;
close(f);
close(g);
end.