#include<fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int ma[100100][18];
int v[400100],n,m,minim,log[100005];
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>>v[i];
ma[i][0]=i;
//introd(1,1,n,i,a);
}
log[1]=0;
for(int i=2;i<=n;i++)
log[i]=log[i/2]+1;
for(int j=1;(1<<j)<=n;j++)
for(int i=1;i<=n,i+(1<<j)-1<=n;i++){
if(v[ma[i][j-1]]<=v[ma[i+(1<<(j-1))][j-1]])
ma[i][j]=ma[i][j-1];
else ma[i][j]=ma[i+(1<<(j-1))][j-1];
}
int j1,i2,j2;
for(int i=1;i<=m;i++){
fin>>a>>b;
j1=log[b-a+1];
i2=a+(1<<j1);
j2=log[b-i2+1];
//minim=1100001;
//query(1,1,n,a,b);
fout<<min(v[ma[a][j1]],v[ma[i2][j2]])<<'\n';
}
return 0;
}