#include <cstdio>
#include <cmath>
#define NMAX 100000
#define LOGMAX 20
using namespace std;
int v[NMAX], M[NMAX][LOGMAX], n;
void build_RMQ() {
int i, j;
for( j = 1; (1<<j) <= n; j ++ )
for( i = 0; i + (1<<j) <= n; i ++ ) {
if( v[M[i][j-1]] < v[M[i + (1<<(j - 1))][j-1]] )
M[i][j] = M[i][j-1];
else
M[i][j] = M[i + (1<<(j - 1))][j-1];
}
}
void querry(int a, int b) {
a --;
b --;
int k = log2(b - a + 1);
if( v[M[a][k]] < v[M[b-(1<<k)+1][k]] )
printf("%d\n",v[M[a][k]]);
else
printf("%d\n",v[M[b-(1<<k)+1][k]]);
}
int main() {
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int i, m;
scanf("%d%d",&n,&m);
for( i = 0; i < n; i ++ ) {
scanf("%d",&v[i]);
M[i][0] = i;
}
build_RMQ();
for( i = 1; i <= m; i ++ ) {
int a, b;
scanf("%d%d",&a,&b);
querry(a,b);
}
return 0;
}