#include<iostream>
using namespace std;
const int LN=20;
const int N=1e6+10;
int logn[N]= {-1};
int a[N];
int f[N][LN];
int m,n;
int query(int l,int r) {
int x=logn[r-l+1];
return max(f[l][x],f[r-(1<<x)+1][x]);
}
int main() {
cin>>n>>m;
for(int i=1; i<=n; i++) {
cin>>a[i];
f[i][0]=a[i];
logn[i]=logn[1>>i]+1;
}
for(int j=1; (1<<j)<=n; j++) {
for(int i=1; i+(1<<j)-1<=n; i++) {
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
}
while(m--) {
int x,y;
cin>>x>>y;
cout<<query(x,y)<<endl;
}
return 0;
}