#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
int n, Q, u, v, w, s[N], tp, hed[N], ed;
long long p[N], d[N], dis[N], f[N];
bool vis[N], flag;
struct edge {
  int to, nex, val;
  edge(int _ = 0, int __ = 0, int ___ = 0) : to(_), nex(__), val(___) {}
} e[N << 1];
inline void add(int u, int v, int w) {
  e[++ed] = edge(v, hed[u], w);
  hed[u] = ed;
}
bool get_path(int u, int _to) {
  vis[u] = 1;
  s[++tp] = u;
  if (u == _to) return 1;
  for (int i = hed[u], v = e[i].to; i; i = e[i].nex, v = e[i].to)
    if (!vis[v]) {
      dis[v] = dis[u] + e[i].val;
      if (get_path(v, _to)) return 1;
    }
  --tp;
  vis[u] = 0;
  return 0;
}
void dfs(int u, int fa, int dep) {
  if (dep == 2) flag = 1;
  p[u] = d[u];
  int cnt = 0;
  for (int i = hed[u], v = e[i].to; i; i = e[i].nex, v = e[i].to)
    if (!vis[v] && (v ^ fa)) {
      d[v] = d[u] + e[i].val;
      dfs(v, u, dep + 1);
      p[u] = max(p[u], p[v]);
      ++cnt;
    }
  if (cnt > 1) flag = 1;
}
int main() {
  scanf("%d%d", &n, &Q);
  for (int i = (1); i <= (n - 1); ++i)
    scanf("%d%d%d", &u, &v, &w), add(u, v, w), add(v, u, w);
  get_path(1, n);
  long long lst = -1e18, ans = -1e18;
  for (int i = (1); i <= (tp); ++i) {
    dfs(s[i], 0, 0), f[i] = dis[s[i]];
    ans = max(ans, lst + dis[n] - f[i] + p[s[i]]);
    if (i > 1 && (p[s[i - 1]] || p[s[i]]))
      ans = max(ans, f[i - 1] + dis[n] - f[i] + p[s[i - 1]] + p[s[i]]);
    if (i > 1) lst = max(lst, f[i - 1] + p[s[i - 1]]);
  }
  if (flag) ans = f[tp];
  while (Q--) {
    int x;
    scanf("%d", &x);
    printf("%lld\n", min(ans + x, f[tp]));
  }
  return 0;
}
