#include <bits/stdc++.h>
using namespace std;
const int INF = 2e9;
const long long LINF = 2e16;
const int magic = 348;
const int MOD = 998244353;
const double eps = 1e-10;
const double pi = acos(-1);
inline int getint() {
  bool f;
  char ch;
  int res;
  while (!isdigit(ch = getchar()) && ch != '-') {
  }
  if (ch == '-')
    f = false, res = 0;
  else
    f = true, res = ch - '0';
  while (isdigit(ch = getchar())) res = res * 10 + ch - '0';
  return f ? res : -res;
}
const int MAXN = 3e5;
int n, m;
vector<pair<int, int> > v[MAXN + 48];
int sz[MAXN + 48], fa[MAXN + 48], falen[MAXN + 48];
long long a[MAXN + 48], tot = 0;
long long sum[MAXN + 48];
int cnt[MAXN + 48];
int b[MAXN + 48], tt;
int visited[MAXN + 48];
int ff[MAXN + 48];
long long M[MAXN + 48], mpos[MAXN + 48];
inline void dfs(int cur, int father) {
  sz[cur] = 1;
  int i;
  pair<int, int> second;
  for (i = 0; i < int(v[cur].size()); i++) {
    second = v[cur][i];
    if (second.first != father)
      fa[second.first] = cur, falen[second.first] = second.second,
      dfs(second.first, cur), sz[cur] += sz[second.first];
  }
}
int main() {
  int i, first, second, c;
  n = getint();
  m = getint();
  for (i = 1; i <= n - 1; i++) {
    first = getint();
    second = getint();
    c = getint();
    v[first].push_back(make_pair(second, c));
    v[second].push_back(make_pair(first, c));
  }
  dfs(1, -1);
  int pre = 0;
  for (int cur = n; cur != 1; cur = fa[cur]) {
    a[++tot] = falen[cur];
    cnt[tot] = sz[cur] - 1 - sz[pre];
    pre = cur;
    visited[cur] = tot;
  }
  visited[1] = tot + 1;
  for (i = 1; i <= n; i++)
    if (!visited[i] && visited[fa[i]]) ff[visited[fa[i]]] = falen[i];
  cnt[tot + 1] = sz[1] - 1 - sz[pre];
  bool f = false;
  for (i = 1; i <= tot + 1; i++)
    if (cnt[i] > 1) {
      f = true;
      break;
    }
  if (f) {
    long long ans = 0;
    for (i = 1; i <= tot; i++) ans += a[i];
    while (m--) {
      first = getint();
      printf("%I64d\n", ans);
    }
    return 0;
  }
  sum[1] = 0;
  for (i = 2; i <= tot + 1; i++) sum[i] = sum[i - 1] + a[i - 1];
  for (i = 1; i <= tot + 1; i++) sum[i] -= ff[i];
  M[tot + 1] = sum[tot + 1];
  for (i = tot; i >= 1; i--) M[i] = min(M[i + 1], sum[i]);
  tt = 0;
  for (i = 1; i <= tot + 1; i++)
    if (cnt[i]) b[++tt] = i;
  long long minn = LINF;
  for (i = 1; i <= tot - 1; i++) minn = min(minn, a[i] + a[i + 1]);
  for (i = 1; i <= tt; i++) {
    if (b[i] != 1) minn = min(minn, a[b[i] - 1] - ff[b[i]]);
    if (b[i] != tot + 1) minn = min(minn, a[b[i]] - ff[b[i]]);
  }
  for (i = 1; i <= tt - 1; i++)
    minn = min(minn, M[b[i] + 1] - (sum[b[i]] + ff[b[i]]) - ff[b[i]]);
  long long ans = 0;
  for (i = 1; i <= tot; i++) ans += a[i];
  while (m--) {
    first = getint();
    if (first >= minn)
      printf("%I64d\n", ans);
    else
      printf("%I64d\n", ans + first - minn);
  }
  return 0;
}
