#include <bits/stdc++.h>
using namespace std;
#define int long long
constexpr int N = 1e5 + 7, M = 11;
constexpr int inf = 1E18, mod = 1e9 + 7;
int n, m, root, dep[N], dis[N], f[N][21], a[N];
vector<pair<int, int>> G[N];
inline void bfs() {
memset(dep, 0x3f, sizeof dep);
dep[0] = 0, dep[1] = 1;
queue<int> q;
q.push(1);
while(q.size()) {
int u = q.front();
q.pop();
for (auto [v, w] : G[u]) {
if(dep[v] > dep[u] + 1) {
dep[v] = dep[u] + 1;
dis[v] = dis[u] + w;
f[v][0] = u;
for (int k = 1; k <= 20; k ++) {
f[v][k] = f[f[v][k - 1]][k - 1];
}
q.push(v);
}
}
}
}
inline int lca(int a, int b) {
if(dep[a] < dep[b]) swap(a, b);
for (int k = 20; k >= 0; k --) {
if(dep[f[a][k]] >= dep[b]) {
a = f[a][k];
}
}
if(a == b) return a;
for (int k = 20; k >= 0; k --) {
if(f[a][k] != f[b][k]) {
a = f[a][k];
b = f[b][k];
}
}
return f[a][0];
}
inline int get_dist(int x, int y) {
return dis[x] + dis[y] - 2 * dis[lca(x, y)];
}
inline void Main() {
cin >> n >> m;
for (int i = 1; i <= n - 1; i ++) {
int a, b, c; cin >> a >> b >> c;
G[a].push_back(make_pair(b, c));
G[b].push_back(make_pair(a, c));
}
bfs();
int sum = 0;
for (int i = 1; i <= m; i ++) {
cin >> a[i];
if(i > 1) sum += get_dist(a[i], a[i - 1]);
}
for (int i = 1; i <= m; i ++) {
if(i == 1) cout << sum - get_dist(a[i], a[i + 1]) << " ";
else if(i == m) cout << sum - get_dist(a[i], a[i - 1]) << " ";
else cout << sum - get_dist(a[i], a[i - 1]) - get_dist(a[i], a[i + 1]) + get_dist(a[i - 1], a[i + 1]) << " ";
}
}
signed main() {
cin.tie(nullptr)->sync_with_stdio(false);
int T = 1;
while(T --) Main();
return 0;
}