#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int a[400001], n, m, x, op, y, i;
void f1(int nod, int st, int dr, int p, int val)
{
if(st == dr) {
a[nod] = val;
return;
}
int m = (st + dr)>>1;
if(p <= m)
f1(nod * 2, st, m, p, val);
else
f1(nod * 2 + 1, m + 1, dr, p, val);
if(a[2 * nod] <= a[2 * nod + 1])
a[nod] = a[2 * nod];
else
a[nod] = a[2 * nod + 1];
}
int rmq(int nod, int st, int dr, int i, int j)
{
if(st >= i && j >= dr)
return a[nod];
int m = (st + dr)>>1, r1 = 99999999, r2 = 99999999;
if(i <= m)
r1 = rmq(nod * 2, st, m, i, j);
if(j > m)
r2 = rmq(nod * 2 + 1, m + 1, dr, i, j);
return min(r1, r2);
}
int main() {
f >> n >> m;
for(i = 1; i <= n; i++) {
f >> x;
f1(1, 1, n, i, x);
}
for(i = 1; i <= m; i++) {
f >> x >> y;
g << rmq(1, 1, n, x, y) <<endl;
}
return 0;
}