#include <bits/stdc++.h>
using std::cerr;
using std::cin;
using std::max;
using std::min;
int n, m, a, b, c, ecnt, last[300005], fa[300005], size[300005], son[300005],
    val[300005], sta[300005], top;
long long deep[300005], Max = -1e18;
struct road {
  int to, v, nex;
} e[300005 << 1];
void adde(int u, int v, int w) {
  e[++ecnt] = (road){v, w, last[u]}, last[u] = ecnt;
}
void dfs(int x, int fath = 0) {
  size[x] = 1, fa[x] = fath;
  for (int k = last[x]; k; k = e[k].nex)
    if (e[k].to ^ fath) {
      deep[e[k].to] = deep[x] + e[k].v, dfs(e[k].to, x),
      size[x] += size[e[k].to];
    }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i < n; i++)
    scanf("%d%d%d", &a, &b, &c), adde(a, b, c), adde(b, a, c);
  dfs(1);
  for (int i = n; i; i = fa[i]) sta[++top] = i;
  std::reverse(sta + 1, sta + 1 + top);
  for (int i = 1, cnt; i < top; i++) {
    cnt = 0;
    for (int k = last[sta[i]]; k; k = e[k].nex)
      if (e[k].to ^ sta[i - 1] && e[k].to ^ sta[i + 1]) {
        cnt++;
        if (size[e[k].to] > 1) {
          for (int j = 1; j <= m; j++)
            scanf("%d", &a), printf("%I64d\n", deep[n]);
          return 0;
        }
      }
    if (cnt > 1) {
      for (int j = 1; j <= m; j++) scanf("%d", &a), printf("%I64d\n", deep[n]);
      return 0;
    }
  }
  if (size[n] > 2) {
    for (int j = 1; j <= m; j++) scanf("%d", &a), printf("%I64d\n", deep[n]);
    return 0;
  }
  for (int i = 1; i <= top; i++) {
    for (int k = last[sta[i]]; k; k = e[k].nex)
      if (e[k].to ^ sta[i - 1] && e[k].to ^ sta[i + 1])
        son[i] = e[k].to, val[i] = e[k].v;
  }
  long long tmp = 0;
  for (int i = 1, pre = 0; i <= top; i++) {
    if (son[i]) {
      if (pre) {
        Max = max(Max, val[i] - deep[sta[i]] + tmp);
      }
      pre = i, tmp = max(tmp, val[i] + deep[sta[i]]);
      if (i > 1) Max = max(Max, val[i] - (deep[sta[i]] - deep[sta[i - 1]]));
      if (i < top) Max = max(Max, val[i] - (deep[sta[i + 1]] - deep[sta[i]]));
    }
  }
  for (int i = 1; i < top - 1; i++)
    Max = max(Max, -deep[sta[i + 2]] + deep[sta[i]]);
  for (int i = 1; i <= m; i++) {
    scanf("%d", &a);
    if (Max == -1e18 || Max + a > 0) {
      printf("%I64d\n", deep[n]);
      continue;
    }
    printf("%I64d\n", deep[n] + Max + a);
  }
  return 0;
}
