from functools import *
from sys import setrecursionlimit, getsizeof
from math import log2
n, m = map(int, input().split())
li = list(map(int, input().split()))
logN = int(log2(n))
dp = [[0 for i in range(logN + 1)] for j in range(n)]
for i in range(n):
dp[i][0] = li[i]
for j in range(1, logN + 1):
for i in range(n):
if i + 2 ** (j - 1) < n:
dp[i][j] = max(dp[i][j - 1], dp[i + 2 ** (j - 1)][j - 1])
else:
dp[i][j] = dp[i][j - 1]
for i in range(m):
l, r = map(int, input().split())
l, r = l - 1, r - 1
s = int(log2(r - l + 1))
print(max(dp[l][s], dp[r - (2 ** s) + 1][s]))
唉,困炸了,这应该是python自己的原因了吧?