还是TLE30pts
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[100005];
int f[100005][20];
int lg[100005];
int query(int l,int r){
int g=lg[r-l+1];
return max(f[l][g],f[r-(1<<g)+1][g]);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
f[i][0]=a[i];
}
lg[1]=0;
for(int i=2;i<=n;i++){
lg[i]=lg[i>>1]+1;
}
int lgn=lg[n];
for(int j=1;j<=lgn;j++){
for(int i=1;i<=n-(1<<j)+1;i++){
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
}
while(m--){
int l,r;
cin>>l>>r;
cout<<query(l,r)<<endl;
}
return 0;
}
/*
*/