#include<stdio.h>
int n,k,v[100],rmq[100];
int minpos;
int find(int i,int j,int left,int right,int node)
{
int first,last;
if( i>right || j<left)
return -1;
if( left>=i && right<=j)
{
if(v[rmq[node]]<v[minpos])
minpos=rmq[node];
return rmq[node];
}
first=find(i,j,left,(left+right)/2,node*2);
last=find(i,j,(left+right)/2+1,right,node*2+1);
if(first==-1)
return last;
if (last==-1)
return first;
if(v[first]<=v[last])
return first;
return last;
}
void preprocess_rmq(int left,int right,int node)
{
if(left==right)
rmq[node]=left;
else
{
//meri la copi.
preprocess_rmq(left,(left+right)/2,2*node);
preprocess_rmq((left+right)/2+1,right,2*node+1);
if(v[rmq[2*node]]<=v[rmq[2*node+1]])
rmq[node]=rmq[2*node];
else
rmq[node]=rmq[2*node+1];
}
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++) scanf("%d",&v[i]);
for(int i=1;i<=n;i++)
rmq[i]=-1;
preprocess_rmq(1,n,1);
v[0]=20000000;
for(int i=1;i<=k;i++)
{
int x,y;
scanf("%d %d",&x,&y);
minpos=0;
int aux=find(x,y,1,n,1);
printf("%d\n",v[minpos]);
}
}