#include <bits/stdc++.h>
using namespace std;
const int logn=17;
int n,m;
int a[1000005];
int Log2[1000005];
int maxn[1000005][20];
void init()
{
Log2[0]=-1;
for(int i=1;i<=n;i++)
Log2[i]=Log2[i>>1]+1;
}
inline int read()
{
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;
}
inline void write(int x)
{
if(x<0)
putchar('-'),x=-x;
if(x>=10)
write(x/10);
putchar(x%10+'0');
}
int main()
{
n=read();m=read();
init();
for(int i=1;i<=n;i++)
{
a[i]=read();
maxn[i][0]=a[i];
}
for(int k=1;k<=Log2[n];k++)
for(int i=1;i+(1<<k)<=n+1;i++)
maxn[i][k]=max(maxn[i][k-1],maxn[i+(1<<(k-1))][k-1]);
while(m--)
{
int l,r;
cin>>l>>r;
int k=Log2[r-l+1];
write(max(maxn[l][k],maxn[r-(1<<k)+1][k]));
putchar('\n');
}
return 0;
}
已经这样了还能再优化吗