#include<bits/stdc++.h>
using namespace std;
int a[1005],l[1005],r[1005],dp[10005][10005],logx[10005];
int RMB(int l,int r) {
int k = 0;
while (l + (1 << (r + 1)) - 1 <= r) {
k++;
}
return max(dp[1][k],dp[r-(1<<k)+1][k]);
}
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() {
int n = read();
int m = read();
for (int i = 1; i <= n; i++) cin >> dp[i][0];
for (int i = 2; i <= n; i++)
logx[i] = logx[i/2]+1;
int logn = logx[n];
for(int j=1;j<=logn+1;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
for(int i=1;i<=m;i++){
int l,r;
l = read();
r = read();
int s=logx[r-l+1];
cout << max(dp[l][s],dp[r-(1<<s)+1][s]) << endl;
}
return 0;
}