var a:array[0..16,1..15000]of integer;
i,j,k,n,m:integer; f1,f2:text;
tip,x,y,s,P1,k1,j1:integer;
function log2(y:integer):integer;
var k,p:longint;
begin
k:=0; p:=y;
while p>0 do
begin
p:=p div 2;
inc(k);
end;
log2:=k;
end;
function max(x,y:integer):integer;
begin
if x<y then max:=y else max:=x;
end;
begin
assign(f1, 'datorii.in');
reset(f1);
assign(f2, 'datorii.out');
rewrite(f2);
readln(f1,n,m);
{
writeln(n,' ',m);
}
for i:=1 to n do read(f1,a[0,i]);
k:=1;
while 1 shl k<n do inc(k);
for j:=1 to k do
for i:=1 to n do
begin
a[j,i]:=a[j-1,i];
if 1 shl (j-1) + i<=n
then a[j,i]:=a[j,i]+a[j-1,i+1 shl(j-1)];
end;
for j:=0 to k do
begin
for i:=1 to n do write(a[j,i]:3);
writeln;
end;
for j:=1 to m do
begin
readln(f1,tip,x,y);
if tip=1
then
begin
s:=a[k,x];
if y<n then s:=s-a[k,y];
writeln(f2,s);
end
else
begin
k1:=0;
while 1 shl k1 <x do
begin
for j1:=k1 to k do
dec(a[j1,x+1-(1 shl k1)],y);
inc(k1);
end;
if 1 shl k1 <>x
then
for j1:=k1 to k do
dec(a[j1,1],y);
end
end;
for j:=0 to k do
begin
for i:=1 to n do write(a[j,i]:3);
writeln;
end;
close(f1);
close(f2);
end.