#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int MAX_N = 1e5 + 5;
const int MAX_LG = 2e1;
int n, m;
int v[MAX_N];
int rmq[MAX_LG][MAX_N];
int logs[MAX_N];
int query(int lo, int ri) {
int l, lg;
l = ri - lo + 1;
lg = logs[l];
return min(rmq[lg][lo], rmq[lg][ri - (1 << lg) + 1]);
}
int main() {
int lo, ri;
fin >> n >> m;
for (int i = 2; i <= n; ++i) {
logs[i] = 1 + logs[i / 2];
}
for (int i = 1; i <= n; ++i) {
fin >> v[i];
rmq[0][i] = v[i];
}
for (int lg = 1; (1 << lg) <= n; ++lg) {
for (int i = 1; i <= n - (1 << lg) + 1; ++i) {
rmq[lg][i] = min(rmq[lg - 1][i], rmq[lg - 1][i + (1 << (lg - 1))]);
}
}
while (m --) {
fin >> lo >> ri;
if (lo > ri) {
swap(lo, ri);
}
fout << query(lo, ri) << "\n";
}
return 0;
}