#include<fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int v[400100],n,m,minim;
void introd(int nod,int st, int dr, int poz, int val){
if(st==poz&&dr==poz){
v[nod]=val;
return;
}
int div=(st+dr)/2;
if(poz<=div)introd(2*nod,st,div,poz,val);
else introd(2*nod+1,div+1,dr,poz,val);
v[nod]=min(v[2*nod],v[2*nod+1]);
}
void query(int nod, int st, int dr, int a, int b){
if(a<=st&&dr<=b){
if(minim>v[nod])minim=v[nod];
return;
}
int div=(st+dr)/2;
if(a<=div)query(2*nod,st,div,a,b);
if(div<b)query(2*nod+1,div+1,dr,a,b);
}
int main(){
fin>>n>>m;
int a,b;
for(int i=1;i<=n;i++){
fin>>a;
introd(1,1,n,i,a);
}
for(int i=1;i<=m;i++){
fin>>a>>b;
minim=1100001;
query(1,1,n,a,b);
fout<<minim<<'\n';
}
return 0;
}