#include <cstdio>
#define n_max 400090
#include <algorithm>
#define mv 1000000
using namespace std;
int n,m;
int a[n_max];
int vl,ps,mxm,st,fh;
inline int md(int l,int r){
return l+(r-l)/2;
}
inline int first_sun(int node){
return node<<1;
}
inline int second_sun(int node){
return (node<<1)^1;
}
void update(int node,int l,int r){
if(l==r){
a[node]=vl;
return;
}
int mid=md(l,r);
if(ps<=mid)
update(first_sun(node),l,mid);
else
update(second_sun(node),mid+1,r);
a[node]=min(a[first_sun(node)],a[second_sun(node)]);
}
void read(int n){
for(int i=1,x;i<=n ;++i){
scanf("%d",&x);
vl=x;
ps=i;
update(1,1,n);
}
}
void search(int node,int l,int r){
if(st <= l && fh>= r){
mxm=min(mxm,a[node]);
return;
}
int mid=md(l,r);
if(st<=mid)
search(first_sun(node),l,mid);
if(mid < fh)
search(second_sun(node),mid+1,r);
}
int main(void){
freopen("rmq.in", "r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
read(n);
int x,y;
while(m--){
scanf("%d%d",&x,&y);
mxm=mv;
st=x;fh=y;
search(1,1,n);
printf("%d\n",mxm);
}
}