#include <iostream>
#define INF 2<<29
using namespace std;
int build_rmq_tree(int n, int A[], int T[], int s, int e, int pos) {
if (s == e) return T[pos] = A[s];
else {
int mid = s + (e - s) / 2;
return T[pos] = min(build_rmq_tree(n, A, T, s, mid, 2 * pos + 1), build_rmq_tree(n, A, T, mid + 1, e, 2 * pos + 2));
}
}
int query_rmq(int T[], int s, int e, int pos, int l, int r) {
if ((s < l && e < l) || (s > r && e > r)) return INF;
else if (s >= l && e <= r) return T[pos];
else {
int mid = s + (e - s) / 2;
return min(query_rmq(T, s, mid, 2 * pos + 1, l, r), query_rmq(T, mid + 1, e, 2 * pos + 2, l, r));
}
}
int main() {
int n, m;
cin >> n >> m;
int A[n], T[2 * n];
for (int i=0; i<n; ++i) {
cin >> A[i];
}
build_rmq_tree(n, A, T, 0, n - 1, 0);
int l, r;
for (int i=0; i<m; ++i) {
cin >> l >> r;
cout << query_rmq(T, 0, n - 1, 0, l - 1, r - 1) << "\n";
}
}