#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long double ld;
typedef long long ll;
#define endl '\n'
#define test printf("\ntest\n")
const int N = 1e6+10;
int Max[N][20];
int n,m;
inline int read(){
char c=getchar();
int x=0,f=1;
while(c<'0'||c>'9'){
if(c=='-')
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return f*x;
}
int query(int l ,int r){
int k=log2(r-l+1);
return max(Max[l][k],Max[r-(1<<k)+1][k]);
}
void solve()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
Max[i][0]=read();
for(int j=1;j<=20;j++){
for(int i=1;i<=n-(1<<j)+1;i++){
Max[i][j]=max(Max[i][j-1],Max[i+(1<<(j-1))][j-1]);
}
}
for(int i=1;i<=m;i++){
int l=read(),r=read();
printf("%d\n",query(l,r));
}
}
int main()
{
int t = 1;
while(t--) solve();
return 0;
}