#include<bits/stdc++.h> #define ll long long #define lowbit(x) x&-x using namespace std; const int N=1e5+10; int f[N][40],a[N],n,m; void ST_prework() { for(int i=1;i<=n;i++) { f[i][0]=a[i]; } int t=log(n)/log(2)+1; for(int j=1;j<t;j++) { for(int i=1;i<=n-(1<<j)+1;i++) { f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]); } } } int ST_query(int l,int r) { int k=log(r-l+1)/log(2); return max(f[l][k],f[r-(1<<k)+1][k]); } int main() { int l,r,ans; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } ST_prework(); for(int i=1;i<=m;i++) { scanf("%d%d",&l,&r); ans=ST_query(l,r); printf("%d ",ans); } return 0; }