#include<fstream>
#define nmax 100010
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n,k,t,a[nmax],m[nmax][30],i,j;
int main()
{
int test;
cin>>n>>test;
for (i=1; i<=n; ++i) cin>>a[i];
//precomputing
for (i=1; i<=n; ++i) m[i][0]=i;
for (j=1; (1<<j)<=n; ++j)
for (i=1; i+(1<<j)-1<=n; ++i)
if (a[m[i][j-1]]<a[m[i+(1<<(j-1))][j-1]])
m[i][j]=m[i][j-1];
else
m[i][j]=m[i+(1<<(j-1))][j-1];
while (test--)
{
int x,y;
cin>>x>>y;
int k=0;
while ((1<<k)<=(y-x+1)) ++k; --k;
cout<<min(a[m[x][k]],a[m[y-(1<<k)+1][k]])<<"\n";
}
return 0;
}