#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ii pair<int,int>
#define aa array<int,3>
#define fir first
#define sec second
#define pb push_back
const int maxn=2e5;
int pos[maxn+2],p[maxn+2],n;
vector<int>adj[maxn+2];
int dsu[maxn+2];
int fin(int a){
if(dsu[a]==a)return a;
return dsu[a]=fin(dsu[a]);
}
void merg(int a,int b){
a=fin(a),b=fin(b);
if(a==b)return;
if(p[a]>p[b])swap(a,b);
dsu[a]=b;
}
int bin[maxn+2][20];
int dep[maxn+2];
void dfs(int cur,int par){
bin[cur][0]=par;
dep[cur]=dep[par]+1;
for(auto x : adj[cur]){
if(x==par)continue;
dfs(x,cur);
}
}
int lca(int a,int b){
if(dep[a]<dep[b])swap(a,b);
int slsh=dep[a]-dep[b];
for(int q=19;q>=0;q--){
if((slsh>>q)&1){
a=bin[a][q];
slsh-=(1<<q);
}
}
if(a==b)return a;
for(int q=19;q>=0;q--){
if(bin[a][q]!=bin[b][q]){
a=bin[a][q],b=bin[b][q];
}
}
return bin[a][0];
}
int dist(int a,int b){
return dep[a]+dep[b]-2*dep[lca(a,b)];
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n;
for(int q=1;q<=n;q++){
cin>>p[q];
pos[p[q]]=q;
}
for(int q=1;q<n;q++){
int u,v; cin>>u>>v;
adj[u].pb(v); adj[v].pb(u);
}
dfs(1,0);
for(int q=1;q<20;q++){
for(int w=1;w<=n;w++){
bin[w][q]=bin[bin[w][q-1]][q-1];
}
}
for(int q=1;q<=n;q++)dsu[q]=q;
int dp[n+1];
for(int q=1;q<=n;q++){
dp[pos[q]]=0;
for(auto x : adj[pos[q]]){
if(p[x]<q){
int apa=fin(x);
dp[pos[q]]=max(dp[apa]+dist(apa,pos[q]),dp[pos[q]]);
merg(x,pos[q]);
}
}
}
cout<<dp[pos[n]]<<endl;
}