#include<bits/stdc++.h>
using namespace std;
const int N=1000005;int n,m;
int num[N],f[N][33],lg[N];
inline int read()
{
int f=1,ans=0;char ch;
while(!isdigit(ch)){if(ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) {ans=ans*10+(ch^48);ch=getchar();}
return f*ans;
}
void init()
{
for(int i=1;i<=n;i++)
{
f[i][0]=num[i];
}
for(int j=1;j<=lg[n]-1;j++)
for(int i=1;i<=n;i++)
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
int solve(int l,int r)
{
return max(f[l][lg[r-l+1]-1],f[r-(1<<(lg[r-l+1]-1))+1][lg[r-l+1]-1]);
}
int main()
{
n=read();m=read();
for(int i=1;i<=n;i++)
{
num[i]=read();
}
for(int i=1;i<=n;i++)
{
lg[i]=lg[i-1]+((1<<lg[i-1])==i);
}
init();
for(int i=1;i<=m;i++)
{
int x,y;
x=read(),y=read();
cout<<solve(x,y)<<endl;
}
return 0;
}