#include<stdio.h>
#define Nmax 100010
int arb[2*Nmax];
int poz[Nmax];
int MIN(int x,int y){
if(x<y)
return x;
return y;
}
int go(int i,int li,int lf,int a, int b){
if(lf<a || b<li)
return 10000000;
if(a<=li && lf<=b)
return arb[i];
int mij = (li+lf)>>1;
return MIN(go(2*i,li,mij,a,b), go(2*i+1,mij+1,lf,a,b));
}
void init(int i,int li, int lf){
arb[i] = 10000000;
if(li==lf){
poz[li] = i;
return;
}
int mij = (li+lf)>>1;
init(2*i,li,mij);
init(2*i+1,mij+1,lf);
}
int main(){
FILE *fin = fopen("rmq.in","r"),
*fout = fopen("rmq.out","w");
int N,M;
fscanf(fin,"%d%d",&N,&M);
init(1,1,N);
for(int i=1;i<=N;i++){
fscanf(fin,"%d",&arb[poz[i]]);
int j=poz[i]/2;
while(j){
arb[j] = arb[2*j];
if(arb[2*j+1] < arb[j])
arb[j] = arb[2*j+1];
j>>=1;
}
}
for(int i=1;i<=M;i++){
int st,dr;
fscanf(fin,"%d%d",&st,&dr);
fprintf(fout,"%d\n",go(1,1,N,st,dr));
}
fclose(fin);
fclose(fout);
return 0;
}