连样例都没过
#include<bits/stdc++.h>
#define left (node<<1)
#define right (node<<1|1)
#define ll long long
using namespace std;
ll M,n,a[100010],tree[400010];
inline ll read() {
ll x=0,f=1;
char ch=getchar();
while (!isdigit(ch)) {
if (ch=='-') f=-1;
ch=getchar();
}
while (isdigit(ch)) {
x=x*10+ch-48;
ch=getchar();
}
return x*f;
}
void build(ll l,ll r,ll node) {
if(l==r) {
tree[node]=a[l];
return;
}
ll mid=(l+r)>>1;
build(l,mid,left);
build(mid+1,r,right);
tree[node]=max(tree[left],tree[right]);
}
ll query(ll node,ll s,ll e,ll l,ll r) {
ll INF=-1;
if(r<s||e<l)
return INF;
if(s==e||(l<=s&&e<=r))
return tree[node];
ll mid=(s+e)>>1;
INF=max(INF,query(left,s,mid,l,r));
INF=max(INF,query(right,mid+1,e,l,r));
return INF;
}
int main() {
n=read(),M=read();
for(int i=1; i<=n; ++i)
a[i]=read();
build(1,n,1);
while(M--) printf("%lld\n",query(1,1,n,read(),read()));
}