#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
const long MAXN = 100010;
const long MAXLOGN = 20;
long A[MAXN],M[MAXN][MAXLOGN],N,NQ,LG[MAXN];
void preprocess() {
fprintf(stderr,"Logarith:\n");
for (long i=2;i<=N;++i) {LG[i] = LG[i/2]+1;fprintf(stderr,"%ld %ld\n",i,LG[i]);}
fprintf(stderr,"M:\n");
for (long i=0;i<N;++i) { M[i][0] = A[i];fprintf(stderr,"%ld %ld %ld\n",i,0,M[i][0]);}
for (long j=1;(1<<j)<=N;++j) {
for (long i=0;i + (1<<j) - 1 < N;++i) {
M[i][j] = min(M[i][j-1],M[i+(1<<(j - 1))][j-1]);
fprintf(stderr,"%ld %ld %ld\n",i,j,M[i][j]);
}
}
}
long rmq(long x,long y) {
long k = LG[y-x+1];
fprintf(stderr,"%ld %ld %ld %ld\n",x,y,y-(1<<k)+1,k);
return min(M[x][k],M[y-(1<<k)+1][k]);
}
int main() {
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%ld%ld",&N,&NQ);
for (long i=0;i<N;++i) scanf("%ld",&A[i]);
preprocess();
long x,y;
fprintf(stderr,"RMQ:\n");
for (long i=0;i<NQ;++i) {
scanf("%ld%ld",&x,&y);
printf("%ld\n",rmq(x-1,y-1));
}
fclose(stdin);
fclose(stdout);
}