#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int M[N][30];
int Query(int l,int r){
int k = log2(r-l+1);
return max(M[l][k],M[r-(1<<k)+1][k]);
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i = 1; i <= n; i++) scanf("%d",&M[i][0]);
for(int j = 1; j <= 22; j++)
for(int i = 1; i+(1<<j)-1 <= n; i++)
M[i][j]=max(M[i][j-1],M[i+(1<<(j-1))][j-1]);
for(int i = 1; i <= m; i++){
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",Query(l,r));
}
return 0;
}