#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() {
FILE *f_in = fopen("rmq.in", "r");
FILE *f_out = fopen("rmq.out", "w");
int n, m;
fscanf(f_in, "%d %d", &n, &m);
int A[n], T[2 * n];
for (int i=0; i<n; ++i) {
fscanf(f_in, "%d", &A[i]);
}
build_rmq_tree(n, A, T, 0, n - 1, 0);
int l, r;
for (int i=0; i<m; ++i) {
fscanf(f_in, "%d %d", &l, &r);
fprintf(f_out, "%d\n", query_rmq(T, 0, n - 1, 0, l - 1, r - 1));
}
}