#include<fstream>
#define Nmax 100001
#define Mmax 100000000
using namespace std;
int A[Nmax], dmax, h, n, m, i;
int M[Mmax];
int creatArb (int nod, int st, int dr)
{
int mijl=(st+dr)/2;
if(st==dr)
{
M[nod]=st;
return st;
}
int pozst, pozdr;
pozst=creatArb(2*nod, st, mijl);
pozdr=creatArb(2*nod+1, mijl+1, dr);
if(A[pozdr]>A[pozst])
M[nod]=pozst;
else
M[nod]=pozdr;
return M[nod];
}
int Q(int nod, int st, int dr, int x, int y)
{
if(dr<x || y<st)
return -1;
if(x<=st && dr<=y)
return M[nod];
int pozst, pozdr;
int mijl=(st+dr)/2;
pozst=Q(2*nod, st, mijl, x, y);
pozdr=Q(2*nod+1, mijl+1, dr, x, y);
if(pozst==-1) return pozdr;
if(pozdr==-1) return pozst;
if(A[pozst]>A[pozdr])
return pozdr;
return pozst;
}
int main()
{
int a, b;
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i=1;i<=n;++i)
scanf("%d", &A[i]);
dmax=1,h=1;
while(dmax<=n)
dmax*=2,h++;
dmax*=2;
for(i=1;i<=dmax;++i)
M[i]=-1;
creatArb(1, 1, n);
for(i=1;i<=m;++i)
{
scanf("%d%d", &a, &b);
printf("%d\n", A[Q(1, 1, n, a, b)]);
}
fclose(stdin);
fclose(stdout);
return 0;
}