#include<stdio.h>
#define nmax 100000
int arb[nmax*4+15], n, m, sol;
int min(int a, int b)
{ if(a<b) return a;
else return b;
}
void update(int val, int poz, int nod, int s, int d)
{ int mj;
if(s==d)
{ arb[nod]=val;
return;
}
mj=(s+d)/2;
if(poz<=mj) update(val, poz, 2*nod, s, mj);
else update(val, poz, 2*nod+1, mj+1, d);
if(arb[2*nod]==0)
arb[nod]=arb[2*nod+1];
else
if(arb[2*nod+1]==0)
arb[nod]=arb[2*nod];
else
arb[nod]=min(arb[2*nod], arb[2*nod+1]);
}
void find(int nod, int s, int d, int a, int b)
{ int mj;
if(s>=a && d<=b)
{ if(sol>arb[nod]) sol=arb[nod];
return;
}
mj=(s+d)/2;
if(a<=mj) find(2*nod, s, mj, a, b);
if(b>mj) find(2*nod+1, mj+1, d, a, b);
}
int main ()
{ int i, 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);
update(a, i, 1, 1, n);
}
for(i=0; i<m; i++)
{ scanf("%d%d", &a, &b);
sol=100010;
find(1, 1, n, a, b);
printf("%d\n", sol);
}
return 0;
}