#include <cstdio>
#include <vector>
using namespace std;
int heap[100010];
void update(int ind,int li,int lf,int &i,int &x)
{
if(li==lf)heap[ind]=x;
else
{
int m=(li+lf)/2;
if(i<=m)update(2*ind,li,m,i,x);
else update(2*ind+1,m+1,lf,i,x);
heap[ind]=heap[2*ind]>heap[2*ind+1]?heap[2*ind]:heap[2*ind+1];
}
}
int get_min(int ind,int li,int lf,int a,int b)
{
int mn=900010;
if(a<=li&&lf<=b)
{
mn=mn>=heap[ind]?heap[ind]:mn;
return mn;
}
int m=(li+lf)/2,m1;
if(a<=m)
mn=get_min(2*ind,li,m,a,b);
if(b>=m+1)
{
m1=get_min(2*ind+1,m+1,lf,a,b);
if(m1<mn) mn=m1;
}
return mn;
}
int main()
{
FILE *f=fopen("rmq.in","r");
FILE *g=fopen("rmq.out","w");
int n,m,i,x;
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;++i)
{
fscanf(f,"%d",&x);
update(1,1,n,i,x);
}
int a,b;
for(i=1;i<=m;++i)
{
fscanf(f,"%d%d",&a,&b);
fprintf(g,"%d\n",get_min(1,1,n,a,b));
}
return 0;
}