#include<bits/stdc++.h>
using namespace std;
long lg(long x){
int t=-1;
while(x) x>>=1,t++;
return t;
}
int main(){
int N,M;
cin>>N>>M;
int o=lg(N),a[N][o],p=1;
for(int i=0;i<N;i++) scanf("%d",&a[i][0]);
for(int i=1;i<=o;i++){
N-=p;
for(int j=0;j<N;j++)
a[j][i]=max(a[j][i-1],a[j+p][i-1]);
p<<=1;
}
int l,r,len,t;
while(M--){
scanf("%d %d",&l,&r);
l--;
len=r-l;
t=lg(len);
len=1<<t;
printf("%d\n",max(a[l][t],a[r-len][t]));
}
system("pause");
return 0;
}
用时相当充裕,但11点答案错误