#include <iostream>
#include <cstring>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std ;
const int N =1e6;
#define k1 k<<1
#define k2 k<<1|1
#define int long long
int a[N], mx[N<<2], p[N<<2],n ;
void up(int k){
if(mx[k1] >mx[k2])
mx[k] =mx[k1] , p[k] =p[k1] ;
else
mx[k] =mx[k2] ,p[k] =p[k2] ;
}
void build(int k,int l,int r){
if(l==r){
mx[k] =a[l] ; p[k] =l ; return ;
}
int md =(l+r)/2;
build(k1,l,md) ,build(k2,md+1,r) ;
up(k) ;
}
void cg(int k,int l,int r,int x,int v){
if(l==r){
mx[k] = v; p[k] =l; return ;
}
int md =(l+r)/2 ;
if(x<=md) cg(k1,l,md,x,v); else cg(k2,md+1,r,x,v) ;
up(k) ;
}
int pos ;
int qq(int k,int l,int r,int x,int y){
if(x<=l and y>=r){
pos =p[k] ;
return mx[k] ;
}
int md =(l+r)/2,t=0;
if(x<=md){
t =max(t,qq(k1,l,md,x,y));
}
if(y>md){
t=max(t,qq(k2,md+1,r,x,y)) ;
}
return t;
}