#include <iostream>
#include <fstream>
#include <algorithm>
#include <math.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int DIM = 1e5+7;
const int DIM2 = log2(DIM);
int v[DIM];
int rmq[DIM][DIM2];
void build(int v[],int n)
{
for(int i = 0; i < n; i++)
rmq[i][0] = i;
for(int j = 1; (1ll << j) <=n; j++)
for(int i = 0; i + (1ll << j) - 1 < n;i++)
if(v[rmq[i][j - 1]] < v[rmq[i + (1ll << (j - 1))][j - 1]])
rmq[i][j] = rmq[i][j - 1];
else
rmq[i][j] = rmq[i + (1ll << (j-1))][j - 1];
}
int query(int st, int dr)
{
int l = dr - st + 1;
int k = log2(l);
return min(v[rmq[st][k]], v[rmq[st + l - (1ll << k)][k]]);
}
int main()
{
int n,m;
in >> n >> m;
for(int i = 0; i < n; i++)
in >> v[i];
build(v,n);
while(m--)
{
int x, y;
in >> x >> y;
x--;
y--;
out << query(x,y) << "\n";
}
return 0;
}