#include <fstream>
using namespace std;
const int MAXN = 100005;
const int LMAX = 17;//2 ^ 17 = 131072
ifstream in("rmq.in");
ofstream out("rmq.out");
int v[MAXN];
int rmq[LMAX][MAXN];//elementul minim din intervalul j, j + 2 ^ i
int lmax[MAXN];//cel mai mic nr x astfel incat 2^x <= i
int n;
void preprocesare()
{
for (int i = 1;i <= n;++i)
rmq[0][i] = v[i];
lmax[1] = 0;
for (int i = 2;i <= n;++i)
lmax[i] = lmax[i / 2] + 1;
for (int i = 1;(1 << i) <= n;++i)
for (int j = 1;j <= n - (1 << i) + 1;++j)
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
}
void intrebare()
{
int x,y;
in >> x >> y;
int l = lmax[y - x + 1];
int poz1 = x, poz2 = x + (y - x + 1) - (1 << l);
out << min(rmq[l][poz1], rmq[l][poz2]);
}
int main()
{
int nr_intrebari;
in >> n >> nr_intrebari;
for (int i = 1; i <= n;++i)
in >> v[i];
preprocesare();
for (int i = 1;i <= nr_intrebari;++i)
{
intrebare();
out << '\n';
}
return 0;
}