#include <cstdio>
#include <algorithm>
using namespace std;
#define FILEIN "rmq.in"
#define FILEOUT "rmq.out"
#define NMAX 262145 // 2^K > 2*N
#define INF 0x3f3f3f3f
int AINT[NMAX];
int N, M, sol;
void update(int node, int l, int r, int pos, int val) {
if (l == r) {
AINT[node] = val;
return;
}
int m = (l+r)/2;
if (pos <= m) update(2*node, l, m, pos, val);
else update(2*node+1, m+1, r, pos, val);
if (r == pos) {
AINT[node] = min(AINT[2*node], AINT[2*node+1]);
}
}
void query(int node, int l, int r, int x, int y) {
if (x <= l && r <= y) {
sol = min(sol, AINT[node]);
return;
}
if (x > r || y < l)
return;
int m = (l+r)/2;
query(2*node, l, m, x, y);
query(2*node+1, m+1, r, x, y);
}
int main() {
freopen(FILEIN, "r", stdin);
freopen(FILEOUT, "w", stdout);
scanf("%d %d", &N, &M);
for ( int i = 1, x; i <= N; i++) {
scanf("%d", &x);
update(1, 1, N, i, x);
}
for ( int i = 1, x, y; i <= M; i++ ) {
sol = INF;
scanf("%d %d", &x, &y);
query(1, 1, N, x, y);
printf("%d\n", sol);
}
return 0;
}