program rmq;
var A : array [1..200010] of longint;
n,m,i,i1,i2,mn,x : longint;
f,g : text;
function min(a,b:longint):longint;
begin
if a<b then min := a
else min := b;
end;
procedure update(nod,i,j,p,v : longint);
var mij : longint;
begin
if i=j then A[nod] := v
else begin
mij := (i+j) div 2;
if p<=mij then update(2*nod,i,mij,p,v)
else update(2*nod+1,mij+1,j,p,v);
A[nod] := min(A[2*nod],A[2*nod+1]);
end;
end;
procedure cauta(nod,st,dr,i1,i2:longint);
var mij : longint;
begin
if (i1<=st) and (dr<=i2) then
if A[nod]<mn then mn := A[nod]
else
else begin
mij := (st+dr) div 2;
if i1<=mij then cauta(2*nod,st,mij,i1,i2);
if mij<i2 then cauta(2*nod+1,mij+1,dr,i1,i2);
end;
end;
begin
assign(f,'rmq.in');
reset(f);
assign(g,'rmq.out');
rewrite(g);
readln(f,n,m);
for i := 1 to n do begin
readln(f,x);
update(1,1,n,i,x);
end;
for i := 1 to m do begin
readln(f,i1,i2);
mn := 100000;
cauta(1,1,n,i1,i2);
writeln(g,mn);
end;
close(f);
close(g);
end.