#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N=1e7+10;
int a[N],k;
struct node{
int ll,rr,num;
}s[N];
void f(int l,int r){
int ans=1e9+7;
for(int i=1;i<=k;i++){
if(s[i].ll>=l&&s[i].rr<=r) ans=min(ans,s[i].num);
}
cout<<ans<<" ";
}
int init(int newl,int newr,int id){
k=max(k,id);
if(newl==newr){
s[id].num=a[newl];
s[id].ll=newl;
s[id].rr=newr;
return a[newl];
}
int mid=newl+newr>>1;
int p=init(newl,mid,id*2);
int q=init(mid+1,newr,id*2+1);
s[id].num=min(p,q);
s[id].ll=newl;
s[id].rr=newr;
return min(p,q);
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n,T;
cin>>n>>T;
for(int i=1;i<=n;i++) cin>>a[i];
init(1,n,1);
while(T--){
int l,r;
cin>>l>>r;
f(l,r);
}
return 0;
}