import java.io.*;
public class Main{
static int N,M,k,len;
static int[][] dp;
static int[] log;
public static void main(String[] args) throws IOException{
in in = new in();
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
N = in.next();
M = in.next();
k = (int)(Math.log(N)/Math.log(2)) + 1;
dp = new int[N][k];
log = new int[N + 1];
for(int i = 0;i < N;i++)
dp[i][0] = in.next();
st();
for(int i = 0;i < M;i++) {
out.println(ans(in.next()-1,in.next()-1));
}
out.flush();
}
static void log(int i) {
if(log[i] == 0)
log[i] = (int)(Math.log(i)/Math.log(2));
}
static void st() {
for(int j = 1;j <= k;j++)
for(int i = 0;i + (1 << j) -1 < N;i++)
dp[i][j] = Math.max(dp[i][j-1],dp[i+(1 << (j-1))][j-1]);
}
static int ans(int l,int r) {
len = (r - l + 1);
log(len);
return Math.max(dp[l][log[len]], dp[r - (1 << log[len]) + 1][log[len]]);
}
}
class in{
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
int next() throws IOException{
in.nextToken();
return (int)in.nval;
}
}
```求助大佬!java后5个爆MLE 爆内存了!