#include<bits/stdc++.h>
using namespace std;
const int MAXN = 800010;
long long n,m,a,l1,r1,dp[MAXN][25];
int rr(int l,int r) {
int s = log2(r - l + 1);
return max(dp[l][s],dp[r - (1<<s) + 1][s]);
}
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() {
n = read(),m = read();
for(int i = 1; i <= n; i ++) {
dp[i][0] = read();
}
for(int i = 1; i <= 20; i ++) {
for(int j = 1; j <= n; j ++) {
dp[j][i] = max(dp[j][i - 1],dp[j + (1<<(i - 1))][i - 1]);
}
}
for(int i = 1; i <= m; i ++) {
l1 = read(),r1 = read();
cout << rr(l1,r1) << endl;
}
return 0;
}
帮个忙优化一下