#include<bits/stdc++.h>
using namespace std;int n,m,a[100100],e[100100][100100];
inline int read(){
int op=0,f=1;char az=getchar();
while(az<'0'||az>'9'){
if(az=='-1')
f=-1;
az=getchar();
}
while(az>='0'&&az<='9'){
op=op*10+az-'0';
az=getchar();
}
return op*f;
}
int find(int left,int right){
int mid=log(left+right);
return max(e[left][mid-1],e[1*(1<<(mid-1))][right]);
}
int main() {
int i,i2;
n=read();
m=read();//cout<<"m="<<m<<endl;
for(i=1;i<=n;i++){
e[i][1]=read();
}
for(i=1;i<=23;i++){
for(i2=1;i2*(1<<i)<=n;i2++){
e[i][i2]=max(e[i2][i-1],e[i2*(1<<(i-1))][i]);
}
}
int q,w;
for(i=1;i<=m;i++){
q=read();w=read();
printf("%d",find(q,w));
cout<<endl;
}
return 0;
}
RT,洛谷显示的东西我看不懂。。。。
如果有空的话顺便帮我看看代码吧orz,感觉好像错了好多