#include <bits/stdc++.h>
using namespace std;
int const N = 3e5 + 9;
set<int> adj[N];
int arr[N];
int ans = 1e9 + 10;
int main() {
  int n;
  scanf("%d", &n);
  set<pair<int, int>> st;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &arr[i]);
    arr[i] += 2;
    st.insert({arr[i], i});
  }
  for (int i = 1; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    adj[x].insert(y);
    adj[y].insert(x);
  }
  for (int i = 1; i <= n; i++) {
    int mx = -1e9 - 10;
    st.erase({arr[i], i});
    mx = max(mx, arr[i] - 2);
    for (auto j : adj[i]) {
      st.erase({arr[j], j});
      mx = max(mx, arr[j] - 1);
    }
    if (!st.empty()) mx = max(mx, st.rbegin()->first);
    ans = min(ans, mx);
    st.insert({arr[i], i});
    for (auto j : adj[i]) {
      st.insert({arr[j], j});
    }
  }
  printf("%d", ans);
  return 0;
}
