数据范围
• 对于50% 的数据,1<=N;M <=100。
• 对于100% 的数据,1 <= N;M<= 100 000,0<= Ai <= 10 000,1 <= Li<= Ri<= N。
uses math;
var
a,b,c,i,j,k:longint;
v:array[1..100000]of longint;
r:array[1..100000,0..20,1..2]of longint;
function ss(l,u:longint):longint;
var
i,j:longint;
begin
if l=u then
begin
inc(r[l,0,1]);
inc(r[u,0,1]);
r[l,r[l,0,1],1]:=v[l];
r[l,r[l,0,1],2]:=u;
r[u,r[u,0,1],1]:=v[l];
r[u,r[u,0,1],2]:=l;
exit(v[l]);
end
else
begin
i:=ss(l,(u+l) div 2);
j:=ss((u+l) div 2+1,u);
inc(r[l,0,1]);
inc(r[u,0,1]);
r[l,r[l,0,1],1]:=i+j;
r[l,r[l,0,1],2]:=u;
r[u,r[u,0,1],1]:=i+j;
r[u,r[u,0,1],2]:=l;
exit(i+j);
end;
end;
function yy(l,u,i,j:longint):longint;
var
i1,j1,o:longint;
begin
i1:=0;
j1:=0;
if (i=l)and(j=u) then
begin
for o:=1 to r[l,0,1] do
begin
if r[l,o,2]=u then
exit(r[l,o,1]);
end;
end
else
begin
if (i>=l)and(i<=(u+l) div 2)and(j>=l)and(j<=(u+l) div 2) then
i1:=yy(l,(u+l) div 2,i,j);
if (i>=(u+l) div 2+1)and(i<=u)and(j>=(u+l) div 2+1)and(j<=u) then
j1:=yy((u+l) div 2+1,u,i,j);
if (i>=l)and(i<=(u+l) div 2)and(j>=(u+l) div 2+1)and(j<=u) then
begin
i1:=yy(l,(u+l) div 2,i,(u+l) div 2);
j1:=yy((u+l) div 2+1,u,(u+l) div 2+1,j);
end;
exit(i1+j1);
end;
end;
begin
assign(input,'sum.in');reset(input);
assign(output,'sum.out');rewrite(output);
readln(a,b);
for c:=1 to a do
read(v[c]);
ss(1,a);
for c:=1 to b do
begin
readln(i,j);
writeln(yy(1,a,i,j));
end;
close(input);
close(output);
end.