var A:array[1..100000] of longint;
suma:longint;
procedure update(nod,st,dr,pos,val:longint);
var mij:longint;
begin
if (st = dr)
then
begin
dec(a[nod], val);
exit;
end;
mij := (st + dr) div 2;
if(pos <= mij)
then update(nod*2, st, mij, pos, val)
else update(nod*2 +1, mij+1, dr, pos, val);
A[nod] := A[nod*2] + A[nod*2+1];
end;
procedure query(nod,st,dr,a1,b:longint);
var mij:longint;
begin
if((a1 <= st) and (dr <= b))
then begin
inc(suma,A[nod]);
exit;
end;
mij := (st + dr) div 2;
if(a1 <= mij)
then query(nod*2, st, mij, a1, b);
if(b > mij)
then query(nod*2+1, mij+1, dr, a1, b);
end;
var N, M, i, x, a1, b, y:longint;
f1, f2:text;
begin
assign(f1, 'datorii.in');
reset(f1);
assign(f2, 'datorii.out');
rewrite(f2);
readln(f1, N, M);
for i := 1 to N do
begin
read(f1, x);
y := -x;
update(1, 1, N, i, y);
end;
for i := 1 to M do
begin
read(f1, x, a1, b);
if x = 1
then begin
suma := 0;
query(1, 1, N, a1, b);
writeln(f2, suma);
end
else update(1, 1, N, a1, b);
end;
close(f1);
close(f2);
end.