import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static int[] dp;
public static int res = 0;
public static Map<Integer,List<Integer>> map;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int n = in.nextInt();
int[] num = new int[n+1];
for(int i=1;i<=n;i++){
num[i] = in.nextInt();
}
map = new HashMap<>();
for(int i=0;i<n-1;i++){
int a = in.nextInt();
int b = in.nextInt();
if(num[a]>num[b]){
List<Integer> list = map.getOrDefault(b,new ArrayList<>());
list.add(a);
map.put(b,list);
// System.out.println(b+"-"+a);
} else if(num[b]>num[a]){
List<Integer> list = map.getOrDefault(a,new ArrayList<>());
list.add(b);
map.put(a,list);
// System.out.println(a+"-"+b);
}
}
dp=new int[n+1];
for(int i=1;i<=n;i++){
res = Math.max(dg(i),res);
}
System.out.println(res+1);
}
}
public static int dg(int i){
if(dp[i]!=0){
return dp[i];
}
List<Integer> list = map.get(i);
if(list == null){
return 0;
}
int max = 0;
for(Integer ii:list){
if(dp[ii] == 0){
dp[ii] = dg(ii);
}
max = Math.max(dp[ii]+1,max);
}
return max;
}
}