#include<bits/stdc++.h>
using namespace std;
int n,m;
const int MAXN=100001;
int ans;
int f[MAXN][22];
int a[MAXN];
int st(int len){
for(int i=0;i<log2(len+1);i++){
for(int j=1;j<=len;j++){
if(i==0){
f[j][i]=a[j];
continue;
}
f[j][i]=max(f[j][i-1],f[i+(1<<j-1)][i-1]);
}
}
}
int query(int l,int r){
ans=max(f[l][(int)log2(r-l+1)],f[r-(int)log2(r-l+1)][(int)log2(r-l+1)]);
cout<<ans<<endl;
}
struct node{
int l,r;
}cha[MAXN];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
st(n);
for(int i=1;i<=m;i++){
cin>>cha[i].l>>cha[i].r;
}
for(int i=1;i<=m;i++){
query(cha[i].l,cha[i].r);
}
return 0;
}