type nd=^nod;
nod=record
val:longint;
st,dr:nd
end;
var f,fo:text;
n,m,x,y,i:longint;
rmq:nd;
procedure init(st,dr:longint;var x:nd);
var p:nd;
m:longint;
begin
m:=st+(dr-st)div 2;
new(p);
p^.val:=100003;
p^.st:=nil;
p^.dr:=nil;
if st<dr then
begin
init(st,m,p^.st);
init(m+1,dr,p^.dr)
end;
x:=p;
end;
function adauga(st,dr,x,poz:longint;var rmq:nd):longint;
var m,a,b:longint;
begin
if st=dr then
begin
rmq^.val:=x;
adauga:=x
end
else
begin
m:=st+(dr-st)div 2;
a:=rmq^.st^.val;
b:=rmq^.dr^.val;
if poz<=m then
a:=adauga(st,m,x,poz,rmq^.st);
if poz>m then
b:=adauga(m+1,dr,x,poz,rmq^.dr);
if a<b then
begin
rmq^.val:=a;
adauga:=a
end
else
begin
rmq^.val:=b;
adauga:=b
end
end;
end;
function min(st,dr,x,y:longint;rmq:nd):longint;
var minim,m,a,b:longint;
begin
if (st>=x)and(dr<=y)
then min:=rmq^.val
else
if (st<=y)and(dr>=x)then
begin
m:=st+(dr-st)div 2;
a:=100003;b:=100003;
if (x<=m)and(m<=y)then
begin
a:=min(st,m,x,y,rmq^.st);
b:=min(m+1,dr,x,y,rmq^.dr)
end
else
if m>=y then
a:=min(st,m,x,y,rmq^.st)
else
b:=min(m+1,dr,x,y,rmq^.dr);
minim:=a;
if b<minim then minim:=b;
min:=minim
end
else
min:=100003
end;
begin
assign(f,'rmq.in');
assign(fo,'rmq.out');
reset(f);
readln(f,n,m);
init(1,n,rmq);
for i:=1 to n do
begin
readln(f,x);
adauga(1,n,x,i,rmq);
end;
rewrite(fo);
for i:=1 to m do
begin
readln(f,x,y);
writeln(fo,min(1,n,x,y,rmq));
end;
close(fo);
close(f);
end.