#include <iostream>
#include<math.h>
#include <algorithm>
using namespace std;
const int logn = 20;
const int maxn = 100005;
int f[maxn][logn + 1];
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 = read();
int m = read();
for (int i = 1; i <= n; i++) {
f[i][0] = read();
}
for (int j = 1; j <= logn; 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 = 0; i < m; i++) {
int x = read(), y = read();
int k = log2(y - x + 1);
cout << max(f[x][k], f[y - (1 << k) + 1][k]) << endl;
}
}