#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > vecinos;
vector<int> visitada;
set<int> atacadas;
int visitadas;
int mayor_dist;
int lejano;
void dfs(int u, int dist) {
  if (atacadas.find(u) != atacadas.end()) {
    visitada[u] = 2;
    visitadas++;
  } else
    visitada[u] = 1;
  for (int v : vecinos[u])
    if (visitada[v] == 0) {
      dfs(v, dist + 1);
      if (visitada[u] != 2 && visitada[v] == 2) {
        visitada[u] = 2;
        visitadas++;
      }
    }
  if (visitada[u] == 2)
    if (dist > mayor_dist || (dist == mayor_dist && u < lejano)) {
      lejano = u;
      mayor_dist = dist;
    }
}
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  vecinos.assign(n + 1, vector<int>());
  visitada.assign(n + 1, 0);
  visitadas = 0;
  for (int i = 1; i < n; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    vecinos[u].push_back(v);
    vecinos[v].push_back(u);
  }
  for (int i = 0; i < m; i++) {
    int tmp;
    scanf("%d", &tmp);
    atacadas.insert(tmp);
  }
  mayor_dist = 0;
  lejano = *(atacadas.begin());
  dfs(lejano, 0);
  int res = 2 * (visitadas - 1);
  visitada.assign(n + 1, 0);
  int ini = lejano;
  mayor_dist = 0;
  lejano = ini;
  dfs(lejano, 0);
  res -= mayor_dist;
  printf("%d\n%d\n", ini < lejano ? ini : lejano, res);
}
