#include <stdio.h>
struct nod{
int nr,poz;
nod *st,*dr;
}*r;
int n,m,inf=999999;
void insert(nod *&r,int nr,int poz){
if(r==0){
r=new nod;
r->nr=nr;
r->poz=poz;
r->st=0;
r->dr=0;
}
else
if(nr<r->nr)
insert(r->st,nr,poz);
else
if(nr>r->nr)
insert(r->dr,nr,poz);
}
int minim(int a,int b,int c){
int min=a;
if(min>b)
min=b;
if(min>c)
min=c;
return min;
}
int find(nod *r,int x,int y){
int a=inf,b=inf;
if(r){
int c=r->nr;
if(r->poz<=y){
if(x<=r->poz){
if(r->st)
a=find(r->st,x,y);
if(a<c)
return a;
return c;
}
a=find(r->st,x,y);
b=find(r->dr,x,y);
}
}
if(a<b)
return a;
return b;
}
void read(){
freopen("rmq.in","r",stdin);
scanf("%d %d\n",&n,&m);
int i,x,y;
for(i=1;i<=n;i++){
scanf("%d\n",&x);
insert(r,x,i);
}
for(i=1;i<=m;i++){
scanf("%d %d\n",&x,&y);
printf("%d\n",find(r,x,y));
}
fclose(stdin);
}
void write(nod *r){
if(r){
write(r->st);
printf("%d ",r->poz);
write(r->dr);
}
}
int main(){
freopen("rmq.out","w",stdout);
read();
fclose(stdout);
return 0;
}