#include <iostream>
#include <cstdio>
#include <algorithm>
#define nmax 100001
#define inf 1<<30
using namespace std;
FILE *f=fopen("rmq.in","r"),*g=fopen("rmq.out","w");
int v[nmax],ai[4*nmax],a,b,n;
void init(int nod, int st, int dr)
{
if(st==dr)
{
if(st<=n)
ai[nod]=v[st];
else
ai[nod]=inf;
return;
}
int mij=(st+dr)/2;
init(nod*2,st,mij);
init(nod*2+1,mij+1,dr);
ai[nod]=min(ai[nod*2],ai[nod*2+1]);
}
int query(int nod, int st, int dr)
{
if(a<=st&&dr<=b)
return ai[nod];
int mij=(st+dr)/2,q1=inf,q2=inf;
if(a<=mij)
q1=query(nod*2,st,mij);
if(b>mij)
q2=query(nod*2+1,mij+1,dr);
return min(q1,q2);
}
int main()
{
int p=1,m,i;
fscanf(f,"%d %d",&n,&m);
while(p<n)
p*=2;
for(i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
init(1,1,p);
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d",&a,&b);
fprintf(g,"%d\n",query(1,1,p));
}
return 0;
}