var f:array[1..100,0..100]of longint;
i,n,m,x,y,k:longint;
function max(a,b:longint):longint;
begin
if a>b then
exit(a);
exit(b);
end;
procedure happy;
var i,j:longint;
begin
for j:=1 to trunc(ln(n)/ln(2)) do
for i:=1 to n do
f[i,j]:=max(f[i,j-1],f[i+2*(j-1),j-1]);
end;
begin
readln(n,m);
for i:=1 to n do
readln(f[i,0]);
happy;
for i:=1 to m do
begin
readln(x,y);
k:=trunc(ln(y-x+1)/ln(2));
writeln(max(f[x,k],f[y-1 shl k+1,k]));
end;
end.
i,n,m,x,y,k:longint;
function max(a,b:longint):longint;
begin
if a>b then
exit(a);
exit(b);
end;
procedure happy;
var i,j:longint;
begin
for j:=1 to trunc(ln(n)/ln(2)) do
for i:=1 to n do
f[i,j]:=max(f[i,j-1],f[i+2*(j-1),j-1]);
end;
begin
readln(n,m);
for i:=1 to n do
readln(f[i,0]);
happy;
for i:=1 to m do
begin
readln(x,y);
k:=trunc(ln(y-x+1)/ln(2));
writeln(max(f[x,k],f[y-1 shl k+1,k]));
end;
end.