#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100000;
const int MAXL = 17;
int rmq[MAXL][MAXN + 1];
char expo[MAXN + 1];
int minim(int a, int b) {
return a < b ? a : b;
}
int readInt(FILE *fin) {
int x;
char ch;
ch = fgetc(fin);
while (isspace(ch)) {
ch = fgetc(fin);
}
x = 0;
while (isdigit(ch)) {
x = x * 10 + ch - '0';
ch = fgetc(fin);
}
return x;
}
int query(int st, int dr) {
int e, p;
e = expo[dr - st + 1];
p = (1 << e);
return minim(rmq[e][st], rmq[e][dr - p + 1]);
}
int main()
{
FILE *fin, *fout;
int n, m, i, st, dr, j, p;
fin = fopen("rmq.in", "r");
n = readInt(fin);
m = readInt(fin);
rmq[0][1] = readInt(fin);
for (i = 2; i <= n; i++) {
rmq[0][i] = readInt(fin);
expo[i] = expo[i / 2] + 1;
}
j = p = 1;
while (2 * p <= n) {
for (i = 1; i <= n - 2 * p + 1; i++) {
rmq[j][i] = minim(rmq[j - 1][i], rmq[j - 1][i + p]);
}
p *= 2;
j++;
}
fout = fopen("rmq.out", "w");
for (i = 0; i < m; i++) {
st = readInt(fin);
dr = readInt(fin);
fprintf(fout, "%d\n", query(st, dr));
}
fclose(fin);
fclose(fout);
return 0;
}