#include <stdio.h>
#include <cmath>
#define NMAX 100000
long N, M, A[NMAX], mat[NMAX][17];
long i,j,k, t;
using namespace std;
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%ld %ld", &N, &M);
for(i=0 ; i <N ; i++)
scanf("%ld", &A[i]);
//initialize mat for the intervals with length 1
for (i = 0; i < N; i++)
mat[i][0] = i;
//compute values from smaller to bigger intervals
for(j = 1; 1 << j <= N; j++)
for(i = 0; i + (1 << j) - 1 < N; i++){
/* printf("compare: (%ld) %ld\t (%ld) %ld\t\t",
mat[i][j - 1], A[ mat[i][j - 1]] ,
mat[i + (1 << (j - 1))][j - 1], A[ mat[i + (1 << (j - 1))][j - 1]]);
*/
if (A[ mat[i][j - 1]] < A[ mat[i + (1 << (j - 1))][j - 1]]){
mat[i][j] = mat[i][j - 1];
// printf(": %ld\n", mat[i][j]);
}
else{
mat[i][j] = mat[i + (1 << (j - 1))][j - 1];
// printf(": %ld\n", mat[i][j]);
}
}
/*
for(i = 0 ; i < N ; i++){
for(j = 0; j < log(N) / log(2); j++)
printf("%ld ", mat[i][j]);
printf("\n");
}
*/
//resolv query
for(t=0 ; t<M ; t++){
scanf("%ld %ld", &i, &j);
i--;
j--;
k =(long) (log(j-i+1) / log(2) );
/*
printf("(%ld) %ld (%ld) %ld\n",
mat[i][k], A[ mat[i][k]], mat[j - (1 << k) +1][k], A[mat[j - (1 << k) +1][k]]);
*/
if(A[ mat[i][k]] <= A[mat[j - (1 << k) +1][k]] )
printf("%ld\n", A[mat[i][k] ] );
else
printf("%ld\n", A[mat[j - (1 << k) +1][k] ]);
}
return 0;
}