#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
namespace wzl{
const int maxm = 1e5 + 1;
const int maxn = 1e5 + 1;
int m,n;
int dp[maxm][30]={};
inline void make_st(){
for(int i = 1; (1<<i) <= m; ++i){
for(int x = 1; x+(1<<i)-1 <= m; ++x){
dp[x][i] = max(dp[x][i-1],dp[x+(1<<(i-1))][i-1]);
}
}
return;
}
inline int query(int x,int y){
int d = log2(y-x+1);
return max(dp[x][d],dp[y-(1<<d)+1][d]);
}
void main(){
// ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin>>m>>n;
for(int i = 1; i <= m; ++i){
cin>>dp[i][0];
}
make_st();
do{
int a,b;
// cin>>a>>b;
scanf("%d%d",&a,&b);
// cout<<query(a,b)<<endl;
printf("%d\n",query(a,b));
}while(--n);
return;
}
}
int main(){
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
wzl::main();
return 0;
}
//洛谷 P1816 忠诚
注释的是cin,cout的。
虽然我知道我已经问过一遍了类似的了但我还是不太懂