#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<set>
#include<map>
#include<queue>
using namespace std;
const int manx=5009;
const int mamx=100001;
typedef long long LL;
inline int read() {
int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';return x*f;
}
long long n,m;
int lg2[mamx],f[10009][100],a[mamx];
inline void ST(){
for (int i = 1;i <= n; i++) f[i][0] = a[i];
for (int j = 1;j <= n; j++)
for (int i = 1;i + (1 << j - 1) <= n; i++){
f[i][j] = max(f[i][j - 1],f[i + (1 << j - 1)][j - 1]);
}
for (int i = 2;i <= n; i++)
{
lg2[i] = lg2[i >> 1] + 1;
}
}
int RMQ(int l,int r){
int k = lg2[r - l + 1];
return max ( f[l][k],f[r - (1 << k) + 1][k]);
}
int main(){
n = read();
m = read();
for (int i = 1;i <= n; i++){
cin >> a[i];
ST();
}
for (int i = 1;i <= m; i++){
int x = read(),y = read();
cout<<RMQ(x,y)<<endl;
}
}