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