#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
template<typename t>
struct Stable
{
private:
t** _data;
int* _log2;
int _maxn;
int _maxl;
void MemInit(int maxn)
{
_maxn=maxn+5;_maxl=(int)(log2(_maxn)+5);
_data=new t*[_maxn];
_log2=new int[_maxn];
memset(_log2,0,sizeof(t)*_maxn);
for(int i=2;i<_maxn;i++)
_log2[i]=_log2[i>>1]+1;
for(int i=0;i<_maxn;i++)
{
_data[i]=new t[_maxl];
memset(_data[i],0,(_maxl)*sizeof(t));
}
}
public:
void Build(t* data,int maxn)
{
MemInit(maxn);
for(int i=1;i<=maxn;i++)
_data[i][0]=data[i];
for(int l=1;l<_maxl;l++)
{
for(int s=1;s+(1<<l)-1<=maxn;s++)
{
_data[s][l]=max(_data[s][l-1],_data[s+(1<<(l-1))][l-1]);
}
}
}
t Inquire(int l,int r)
{
int ll=_log2[r-l+1];
return max(_data[l][ll],_data[r-(1<<ll)+1][ll]);
}
~Stable()
{
for(int i=0;i<_maxn;i++)
delete [] _data[i];
delete [] _data;
delete [] _log2;
}
};
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;
}
int main()
{
int n,m;cin>>n>>m;
int* tmp=new int[n+2];
for(int i=1;i<=n;i++)
tmp[i]=read();
Stable<int> stable;
stable.Build(tmp,n);
delete [] tmp;
for(int i=1;i<=m;i++)
{
int a,b;cin>>a>>b;
cout<<stable.Inquire(a,b)<<endl;
}
}