#include <iostream>
using namespace std;
long long n, m;
long long l, r;
long long a[700005];
long long logs[700005];
long long ST[700005][10];
inline long long read()
{
long long 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;
}
inline long long query(long long l, long long r) {
long long lg = logs[r-l+1];
return max(ST[l][lg], ST[r-(1<<lg)+1][lg]);
}
int main() {
n = read();
m = read();
for (long long i = 1; i <= n; i++) {
a[i] = read();
}
for (long long i = 2; i <= n+1; i++) {
logs[i] = logs[i>>1]+1;
}
for (long long i = 1; i <= n; i++) {
ST[i][0] = a[i];
}
for (long long j = 1; j <= logs[n]; j++) {
for (long long i = 1; i <= n+(1<<j)+1; i++) {
ST[i][j] = max(ST[i][j-1], ST[i+(1<<(j-1))][j-1]);
}
}
while (m--) {
l = read();
r = read();
cout << query(l, r) << '\n';
}
return 0;
}