#include <cstdio>
#include <cmath>
#include <algorithm>
#define N 100005
using namespace std;
int n, m;
int mx[N][21];
int query(int l, int r) {
int k = log2(r - l + 1);
return max(mx[l][k], mx[r-(1<<k)+1][k]);
}
int read() {
int w = 1, x = 0;
char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') {
w = -1;
}
}
while(c >= '0' && c <= '9') {
x = x * 10 + (c - '0');
c = getchar();
}
return x * w;
}
void inp() {
n = read(), m = read();
for(int i=1; i<=n; i++) {
mx[i][0] = read();
}
}
void work() {
for(int j=1; j<=21; j++) {
for(int i=1; i+(1<<j)-1<=n; i++) {
mx[i][j] = max(mx[i][j-1], mx[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() {
inp();
work();
return 0;
}