code:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+15;
int a[N][30],P[64],n,m;
inline int read()
{
register 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 init(){
P[1]=0,P[2]=1;
for(register int i=3;i<=60;i++){
P[i]=P[i>>1]+1;
}
}
int Calculate_ST_List(){
for(register int j=1;j<=30;j++){
for(register int i=1;i+(1<<j)-1<=n;++i){
a[i][j]=max(a[i][j-1],a[i+(1<<(j-1))][j-1]);
}
}
return log2(n);
}
int getmax(int l,int r){
int logval=P[r-l+1];
return max(a[l][logval],a[r-(1<<logval)+1][logval]);
}
int main(){
init();
n=read();m=read();
for(register int i=1;i<=n;i++){
a[i][0]=read();
}
Calculate_ST_List();
for(register int i=1;i<=m;i++){
int l=read(),r=read();
printf("%d\n",getmax(l,r));
}
}