#include <stdio.h>
#define min(a,b) (a<b?a:b)
using namespace std;
int heap[100100],n,m;
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(ind*2,li,m,i,x);
else update(ind*2+1,m+1,lf,i,x);
heap[ind]=min(heap[ind*2],heap[ind*2+1]);
}
}
void get_min(int ind,int li,int lf,int a,int b,int &minim)
{
if (a<=li&&lf<=b) minim=min(minim,heap[ind]);
else
{
int m=(lf+li)/2;
if (a<=m) get_min(2*ind,li,m,a,b,minim);
if (b>=m+1) get_min(2*ind+1,m+1,lf,a,b,minim);
}
}
int main()
{
FILE *f=fopen("rmq.in","r");
FILE *g=fopen("rmq.out","w");
int 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,minim;
for (i=1;i<=m;i++)
{
fscanf(f,"%d%d",&a,&b);
minim=2001000;
get_min(1,1,n,a,b,minim);
fprintf(g,"%d\n",minim);
}
return 0;
}