#include<fstream>
#include<algorithm>
using namespace std;
int i,j,n,m,a[100010],x,y,min1;
inline void creare(int nod,int st, int dr, int val)
{
int mij;
if(st==dr)
a[nod]=val;
else
{
mij=(st+dr)/2;
if(mij>=i)
creare(nod*2,st,mij,val);
if(mij<i)
creare(nod*2+1,mij+1,dr,val);
a[nod]=min(a[nod*2],a[nod*2+1]);
}
}
inline void det(int nod,int st, int dr, int A,int B)
{
int mij;
if(st>=A&&dr<=B)
{
if(a[nod]<min1)
min1=a[nod];
return ;
}
if(st<dr)
{
mij=(st+dr)/2;
if(mij>=st)
det(nod*2,st,mij,A,B);
if(mij<dr)
det(nod*2+1,mij+1,dr,A,B);
a[nod]=min(a[nod*2],a[nod*2+1]);
}
}
int main()
{
FILE *f=fopen("rmq.in","r");
FILE *g=fopen("rmq.out","w");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;++i)
{
fscanf(f,"%d",&x);
creare(1,1,n,x);
}
for(i=1;i<=m;++i)
{
fscanf(f,"%d%d",&x,&y);
min1=100010;
det(1,1,n,x,y);
fprintf(g,"%d\n",min1);
}
return 0;
}