//
// main.cpp
// range minimum query
//
// Created by Andrada Minca on 06.11.2024.
//
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,m,i,k,qi,qj,a[17][100005];
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>a[0][i];
}
for(int p=1;(1<<p)<=n;p++)
{
for(i=1;i<=n;i++)
{
a[p][i]=a[p-1][i];
k=i+(1<<(p-1));
if(k<=n&&a[p][i]>a[p-1][k])
a[p][i]=a[p-1][k];
}
}
int e[100010];
e[1]=0;
for(i=2;i<=n;i++)e[i]=1+e[i/2];
for(i=1;i<=m;i++)
{
fin>>qi>>qj;
int pp=e[qj-qi+1];
fout<<min(a[pp][qi],a[pp][qj-(1<<pp)+1])<<'\n';
}
return 0;
}