#include <bits/stdc++.h>
using namespace std;
long long numere[100001], arbore[400004], nrNumere, nrOperatii;
void construireArbore(long long stanga, long long dreapta, long long index) {
if (stanga == dreapta)
arbore[index] = numere[stanga];
else {
int mij = stanga + (dreapta - stanga) / 2;
construireArbore(stanga, mij, index << 1);
construireArbore(mij + 1, dreapta, (index << 1) + 1);
arbore[index] = min(arbore[index << 1],
arbore[(index << 1) + 1]);
}
}
int determinareMinim(long long a, long long b, long long stanga, long long dreapta, long long index) {
if (a <= stanga and dreapta <= b) {
return arbore[index];
} else {
if (a <= dreapta and b >= stanga) {
int mij = stanga + (dreapta - stanga) / 2;
return min(determinareMinim(a, b, stanga, mij, index << 1),
determinareMinim(a, b, mij + 1, dreapta, (index << 1) + 1));
}
}
return 100001;
}
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
long long index, operatie, a, b, stanga = 1, dreapta;
scanf("%ld %ld", &nrNumere, &nrOperatii);
dreapta = nrNumere;
for (index = 1; index <= nrNumere; index += 1) {
scanf("%ld ", &numere[index]);
}
construireArbore(stanga, dreapta, 1);
for (index = 1; index <= nrOperatii; index += 1) {
scanf("%ld %ld", &a, &b);
printf("%ld\n", determinareMinim(a, b, stanga, dreapta, 1));
}
return 0;
}