#include<cstdio>
#define il inline
#define ri register int
#define ru register unsigned int
#define ptn putchar('\n')
#define max(a,b) ((a)>(b)?(a):(b))
using namespace std;
const int maxn=1e5+2;
il int read()
{
int as=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') as=(as<<3)+(as<<1)+(ch^48),ch=getchar();
return as*f;
}
il void wt(int x){if(x>9) wt(x/10);putchar(x%10+48);}
int n,m,Max[maxn][21],Log[maxn];
il void init()
{
n=read(),m=read(),Log[0]=-1;
for(ri i=1;i<=n;++i)
Max[i][0]=read(),Log[i]=Log[i>>1]+1;
}
il void ST()
{
for(ri j=1;(1<<j)<=n;++j)
for(ri i=1;i+(1<<j)-1<=n;++i)
Max[i][j]=max(Max[i][j-1],Max[i+(1<<(j-1))][j-1]);
}
il void query()
{
for(ri i=1,l,r,len;i<=m;++i)
l=read(),r=read(),len=Log[r-l+1],
wt(max(Max[l][len],Max[r-(1<<len)+1][len])),ptn; // x+2^k-1=r
}
int main()
{
init(),ST(),query();
return 0;
}