#include <cstdio>
#define infinite 1<<20
#include <algorithm>
using namespace std;
FILE *f=fopen("rmq.in","r");
FILE *g=fopen("rmq.out","w");
int n,m,adi[265001],pos,val,x,y;
inline int minim(int a,int b)
{if (a<b) return a;
return b;
}
inline void update(int st,int dr,int nod)
{if (st==dr) {adi[nod]=val;}
else {int mijl=(st+dr)>>1;
if (pos<=mijl) update(st,mijl,nod*2);
else update(mijl+1,dr,nod*2+1);
adi[nod]=minim(adi[nod*2],adi[nod*2+1]);
}
}
inline void query(int st,int dr,int nod)
{if (x<=st&&dr<=y) val=minim(val,adi[nod]);
else {int mijl=(st+dr)>>1;
if (x<=mijl) query(st,mijl,nod* 2);
if (y>=mijl+1) query(mijl+1,dr,nod*2+1);
}
}
int main()
{int i,j;
fscanf(f,"%d %d",&n,&m);
for (i=1;i<=265000;i++) adi[i]=infinite;
for (i=1;i<=n;i++){fscanf(f,"%d",&j);
pos=i;val=j;
update(1,n,1);}
while (m!=0) {fscanf(f,"%d %d",&x,&y);
val=infinite;
query(1,n,1);
fprintf(g,"%d\n",val);
--m;}
return 0;
}