#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
//#define f cin
//#define g cout
const int dim = 1e5 + 2;
int n, q;
int v[4 * dim];
int mn;
void update(int nod, int st, int dr, int val, int poz){
if(st == dr){
v[nod] = val;
} else {
int m = (st + dr) / 2;
if(poz <= m)
update(2 * nod, st, m, val, poz);
else update(2 * nod + 1, m + 1, dr, val, poz);
v[nod] = min(v[2 * nod], v[2 * nod + 1]);
}
}
void query(int nod, int st, int dr, int capst, int capdr){
if(capst <= st && dr <= capdr){
mn = min(mn, v[nod]);
} else {
int m = (st + dr) / 2;
if(m >= capst)
query(2 * nod, st, m, capst, capdr);
if(m < capdr)
query(2 * nod + 1, m + 1, dr, capst, capdr);
}
}
int main()
{
int i, j, x, y;
f >> n >> q;
for(i = 1; i <= n; ++i){
f >> x;
update(1, 1, n, x, i);
}
for(i = 1; i <= q; ++i){
f >> x >> y;
mn = INT_MAX;
query(1, 1, n, x, y);
g << mn << '\n';
}
return 0;
}