#include<cstdio>
#include<algorithm>
#define INF (1<<30)
#define FOR(i,a,b)\
for(int i=a; i<=b; ++i)
#define infile "rmq.in"
#define outfile "rmq.out"
#define mn(x, y) (v[x] < v[y]) ? x : y
#define nMax 100005
using namespace std;
int v[nMax];
int AI[4 * nMax];
int N, M;
void init(int nod, int st, int dr){
if(st == dr){
AI[nod] = st;
return;
}
int m = (st + dr)/2;
if(st <= m)
init(2*nod, st, m);
if(m < dr)
init(2*nod+1, m+1, dr);
AI[nod] = mn(AI[2*nod], AI[2*nod+1]);
}
int query(int nod, int st, int dr, int a, int b){
if(a <= st && dr <= b)
return AI[nod];
int r1 = 0, r2 = 0, m = (st + dr)/2;
if(a <= m)
r1 = query(2*nod, st, m, a, b);
if(m < b)
r2 = query(2*nod+1, m+1, dr, a, b);
return mn(r1, r2);
}
void update(int nod, int st, int dr, int pos){
if(st == dr){
AI[nod] = pos;
return;
}
int m = (st + dr)/2;
if(pos <= m)
update(2*nod, st, m, pos);
else
update(2*nod+1, m+1, dr, pos);
AI[nod] = mn(AI[2*nod], AI[2*nod+1]);
}
int main(){
freopen(infile, "r", stdin);
freopen(outfile,"w",stdout);
scanf("%d %d", &N, &M);
v[0] = INF;
FOR(i,1,N){
scanf("%d", &v[i]);
//update(1, 1, N, i);
}
init(1,1,N);
int x, y;
while(M--){
scanf("%d %d", &x, &y);
printf("%d\n", v[query(1,1,N,x,y)]);
}
fclose(stdout);
fclose(stdout);
return 0;
}