#include <bits/stdc++.h>
using namespace std;
int n,m;
long long a[10000005];
long long st[1000005][50];
long long fang[50];
long long quary(int l,int r){
int k = log2(r-l+1);
long long ge=fang[k];
long long ans = max(st[l][k],st[r-ge+1][k]);
printf("%d\n",ans);
}
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
int main(){
cin >> n >> m;
for(int i = 1;i<=n;i++){
a[i] = read();
st[i][0] = a[i];
}
fang[0] = 1;
for(int i = 1;i<=20;i++){
fang[i] = fang[i-1]*2;
}
for(int i = 1;i<=18;i++){
for(int j = 1;j<=n;j++){
st[j][i] = st[j][i-1];
if(j+fang[i-1]>n)continue;
st[j][i] = max(st[j][i],st[j+fang[i-1]][i-1]);
}
}
for(int i = 1;i<=m;i++){
int l=0,r=0;
l=read();
r=read();
quary(l,r);
}
}