#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
unsigned int arb[500001];
unsigned int
arbQry(unsigned int n, unsigned int st, unsigned int dr, unsigned int x, unsigned int y) {
unsigned int st2, dr2, mid;
if (st >= x && dr <= y)
return arb[n];
st2 = 1000001;
dr2 = 1000001;
mid = st + (dr - st) / 2;
if (x <= mid) {
st2 = arbQry(2 * n, st, mid, x, y);
}
if (y > mid) {
dr2 = arbQry(2 * n + 1, mid + 1, dr, x, y);
}
return min(dr2, st2);
}
void arbUpd(unsigned int n, unsigned int st, unsigned int dr, unsigned int p, unsigned int val) {
if (st == dr) {
arb[n] = val;
return;
}
unsigned int mid = st + (dr - st) / 2;
if (p <= mid) {
arbUpd(2 * n, st, mid, p, val);
} else {
arbUpd(2 * n + 1, mid + 1, dr, p, val);
}
arb[n] = min(arb[2 * n], arb[2 * n + 1]);
}
int main() {
unsigned int n, m, i, x, y;
fin >> n >> m;
for (i = 0; i < n; ) {
fin >> x;
arbUpd(1, 1, n, ++i, x);
}
for (i = 0; i < m; ++i) {
fin >> x >> y;
fout << arbQry(1, 1, n, x, y) << endl;
}
return 0;
}