#include<bits/stdc++.h>
using namespace std;
int n,m,a[100010],lg[50],z,x,y;
int f[100010][50];
void work(){
lg[0]=-1;
for(int i=1;i<=n;i++)lg[i]=lg[i/2]+1;
for(int i=n;i>=1;i--){
for(int j=1;i+(1<<j)-1<=n;j++){
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
}
}
int main(){
scanf("%d%d",&n,&m);
//if(n>50)return 0;
for(int i=1;i<=n;i++){
scanf("%d",a+i);
f[i][0]=a[i];
}
work();
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
int m=lg[y-x+1];
printf("%d\n",max(f[x][m],f[y-(1<<m)+1][m]));
}
return 0;
}
lg数组开小了