#include<stdio.h>
FILE *fin=fopen("rmq.in","r"),
*fout=fopen("rmq.out","w");
int a[100005],M[400005],N,K;
void completare(int nod,int b,int e){
if(b==e)
M[nod]=e;
else{
completare(2*nod,b,(b+e)/2);
completare(2*nod+1,(b+e)/2+1,e);
if(a[M[2*nod]]<=a[M[2*nod+1]])
M[nod]=M[2*nod];
else
M[nod]=M[2*nod+1];
}
}
int rezolvare(int nod,int b,int e,int i,int j){
int p1,p2;
if(i>e || j<b)
return -1;
if(i<=b && j>=e)
return M[nod];
p1=rezolvare(2*nod,b,(b+e)/2,i,j);
p2=rezolvare(2*nod+1,(b+e)/2+1,e,i,j);
if(p2==-1)
return p1;
if(p1==-1)
return p2;
if(a[p1]<=a[p2])
return p1;
return p2;
}
int main(){
fscanf(fin,"%d %d",&N,&K);
for(int i=1;i<=N;i++)
fscanf(fin,"%d",&a[i]);
completare(1,1,N);
/*
for(int i=1;i<=9;i++)
fprintf(fout,"%d ",a[M[i]]);
*/
for(int k=1;k<=K;k++){
int i,j;
fscanf(fin,"%d %d",&i,&j);
fprintf(fout,"%d\n",a[rezolvare(1,1,N,i,j)]);
}
fclose(fin);
fclose(fout);
return 0;
}