#include <stdio.h>
#define N 1<<18
int v[N],minim,inc,sf,poz,n,m,x;
inline int min(int a,int b)
{
if (a<b)
return a;
return b;
}
void update(int nod,int st,int dr)
{
if (st==dr)
{
v[nod]=x;
return;
}
int t=(st+dr)/2;
if (poz<=t)
update(nod*2,st,t);
else
update(nod*2+1,t+1,dr);
v[nod]=min(v[nod*2],v[nod*2+1]);
}
void query(int nod,int st,int dr)
{
if (inc<=st && dr<=sf)
{
if (minim>v[nod])
minim=v[nod];
return;
}
int t=(st+dr)/2;
if (inc<=t)
query(nod*2,st,t);
if (t<sf)
query(nod*2+1,t+1,dr);
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
int i;
for (i=1; i<=n; i++)
{
scanf("%d",&x);
poz=i;
update(1,1,n);
}
for (i=1; i<=m; i++)
{
scanf("%d%d",&inc,&sf);
minim=100001;
query(1,1,n);
printf("%d\n",minim);
}
return 0;
}