#include <bits/stdc++.h>
using namespace std;
void sc(int& a) { scanf("%d", &a); }
void sc(long long int& a) { scanf("%lld", &a); }
void sc(int& a, int& b) {
  sc(a);
  sc(b);
}
void sc(long long int& a, long long int& b) {
  sc(a);
  sc(b);
}
void sc(int& a, int& b, int& c) {
  sc(a, b);
  sc(c);
}
void sc(long long int& a, long long int& b, long long int& c) {
  sc(a, b);
  sc(c);
}
void prl(int a) { printf("%d\n", a); }
void prl(long long int a) { printf("%lld\n", a); }
void prl() { printf("\n"); }
void prs(int a) { printf("%d ", a); }
void prs(long long int a) { printf("%lld ", a); }
template <class T>
T min(T a, T b, T c) {
  return min(a, min(b, c));
}
template <class T>
T max(T a, T b, T c) {
  return max(a, max(b, c));
}
int mod = 1000000007;
long long int modpow(long long int a, long long int b, long long int mod) {
  long long int res = 1;
  while (b > 0) {
    if (b & 1) res = (res * a) % mod;
    a = (a * a) % mod;
    b = b / 2;
  }
  return res % mod;
}
long long int pow(long long int a, long long int b) {
  long long int res = 1;
  while (b > 0) {
    if (b & 1) res = (res * a);
    a = (a * a);
    b = b / 2;
  }
  return res;
}
inline int add(int a, int b, int m = INT_MAX) {
  a += b;
  if (a >= m) a -= m;
  return a;
}
inline int mul(int a, int b, int m = INT_MAX) {
  return (int)(((long long int)a * (long long int)b) % m);
}
int k, uni[3 * 100 * 1000 + 50], vis[3 * 100 * 1000 + 50],
    f[3 * 100 * 1000 + 50];
vector<int> adj[3 * 100 * 1000 + 50];
long long int ans = 0;
void dfs1(int u) {
  if (uni[u]) f[u]++;
  vis[u] = 1;
  for (__typeof((adj[u]).begin()) it = (adj[u]).begin(); it != (adj[u]).end();
       it++) {
    int v = *it;
    if (vis[v]) continue;
    dfs1(v);
    f[u] += f[v];
  }
}
void dfs2(int u) {
  vis[u] = 1;
  for (__typeof((adj[u]).begin()) it = (adj[u]).begin(); it != (adj[u]).end();
       it++) {
    int v = *it;
    if (vis[v]) continue;
    ans += min(f[v], k + k - f[v]);
    dfs2(v);
  }
}
int main() {
  int n, x, u, v;
  sc(n, k);
  for (int i = 0; i < k + k; i++) sc(x), uni[x] = 1;
  for (int i = 0; i < n - 1; i++) {
    sc(u, v);
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  dfs1(1);
  memset(vis, 0, sizeof(vis));
  dfs2(1);
  prl(ans);
}
