#include<stdio.h>
#define max 200010
#define inf 2000000
int arb[max],v[max],nrn,nro;
void InitArb(int node,int left,int right)
{
if( left==right )
arb[node]=v[left];
else
{
InitArb(2*node,left,(left+right)/2);
InitArb(2*node+1,(left+right)/2+1,right);
if( arb[2*node] <= arb[2*node+1] )
arb[node]=arb[2*node];
else
arb[node]=arb[2*node+1];
}
}
int Question(int node, int left, int right, int a, int b)
{
int st=inf,dr=inf;
if( a<= left && right<=b )
return arb[node];
else
{
if( a<= ((left+right)/2) )
st=Question( 2*node, left, (left+right)/2, a,b);
if( b > ((left+right)/2) )
dr=Question( 2*node+1, (left+right)/2+1, right, a, b);
}
return ( st<dr ) ? st:dr;
}
void Solve()
{
InitArb(1,1,nrn);
int x,a;
for(int i=1; i<=nro; i++)
{
scanf("%d %d",&x,&a);
printf("%d\n",Question(1,1,nrn,x,a));
}
}
void Read_Data()
{
scanf("%d %d",&nrn,&nro);
for(int i=1;i<=nrn;i++)
scanf("%d",&v[i]);
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
Read_Data();
Solve();
//Print_Resault();
return 0;
}