#include<bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
#define il inline
using namespace std;
int m,n;
int a[1000005],c[1000005];
int lowbit(int x){
return x&(-x);
}
void update(int x,int y){
for(int i=x;i<=n;i+=lowbit(i)){
if(c[i]>y) c[i]=y;
else return;
}
}
int query(int x,int y){
int minx=2147483647;
int wzx=y;
while(wzx>=x){
if(wzx-lowbit(wzx)>x){
minx=min(minx,c[wzx]);
wzx-=lowbit(wzx);
}
else{
minx=min(minx,a[wzx]);
wzx--;
}
}
return minx;
}
int main(){
memset(c,127,sizeof(c));
cin>>m>>n;
for(int i=1;i<=m;i++){
cin>>a[i];
update(i,a[i]);
}
for(int i=1;i<=n;i++){
int x,y;
cin>>x>>y;
cout<<query(x,y)<<" ";
}
return 0;
}