#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> adj;
unordered_set<int> S;
long long moves = 0;
bool dfs(int node, int parent) {
bool has = (S.count(node) > 0);
for (int it : adj[node]) {
if (it == parent) continue;
if (dfs(it, node)) {
moves += 2;
has = true;
}
}
return has;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, t;
cin >> n >> t;
adj.resize(n + 1);
for (int i = 0; i < t; i++) {
int x;
cin >> x;
S.insert(x);
}
for (int i = 0; i < n - 1; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(1, 0);
cout << moves << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8dmVjdG9yPGludD4+IGFkajsKdW5vcmRlcmVkX3NldDxpbnQ+IFM7CmxvbmcgbG9uZyBtb3ZlcyA9IDA7Cgpib29sIGRmcyhpbnQgbm9kZSwgaW50IHBhcmVudCkgewogICAgYm9vbCBoYXMgPSAoUy5jb3VudChub2RlKSA+IDApOwoKICAgIGZvciAoaW50IGl0IDogYWRqW25vZGVdKSB7CiAgICAgICAgaWYgKGl0ID09IHBhcmVudCkgY29udGludWU7CgogICAgICAgIGlmIChkZnMoaXQsIG5vZGUpKSB7CiAgICAgICAgICAgIG1vdmVzICs9IDI7CiAgICAgICAgICAgIGhhcyA9IHRydWU7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGhhczsKfQoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGludCBuLCB0OwogICAgY2luID4+IG4gPj4gdDsKCiAgICBhZGoucmVzaXplKG4gKyAxKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHQ7IGkrKykgewogICAgICAgIGludCB4OwogICAgICAgIGNpbiA+PiB4OwogICAgICAgIFMuaW5zZXJ0KHgpOwogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBhZGpbdl0ucHVzaF9iYWNrKHUpOwogICAgfQoKICAgIGRmcygxLCAwKTsKICAgIGNvdXQgPDwgbW92ZXMgPDwgIlxuIjsKICAgIHJldHVybiAwOwp9Cg==