#include <bits/stdc++.h>
using namespace std;
const int MAX = 300000;
int N, M;
vector<pair<int64_t, int64_t> > edges[MAX];
int64_t dist1[MAX], distn[MAX];
int par1[MAX], parn[MAX];
const int64_t INF = 1e18;
int64_t mx1 = -INF, mx = -INF;
set<pair<int64_t, int64_t> > dset;
void dfs(int i, int prev, int par[], int64_t dist[]) {
  par[i] = prev;
  for (auto&& p : edges[i]) {
    if (p.first == prev) continue;
    dist[p.first] = dist[i] + p.second;
    dfs(p.first, i, par, dist);
  }
}
void dfs2(int i, bool inpath) {
  if (!inpath) mx1 = max(mx1, dist1[i]);
  for (auto&& p : edges[i]) {
    int j = p.first;
    if (j == par1[i] || j == parn[i]) continue;
    dset.erase({distn[j], j});
    dfs2(j, false);
  }
  if (inpath) {
    mx = max(mx, mx1 + (*prev(dset.end())).first);
    mx1 = max(mx1, dist1[i]);
    dset.erase({distn[parn[i]], parn[i]});
    if (dset.size() == 0) return;
    mx = max(mx, mx1 + (*prev(dset.end())).first);
    if (parn[i] != N - 1) dfs2(parn[i], true);
  }
}
int count(int i, int prev) {
  int ret = 1;
  for (auto&& p : edges[i]) {
    if (p.first == prev) continue;
    ret += count(p.first, i);
  }
  return ret;
}
int main() {
  int i, j, k;
  cin >> N >> M;
  for (i = 0; i < N - 1; i++) {
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
    edges[a - 1].push_back({b - 1, c});
    edges[b - 1].push_back({a - 1, c});
  }
  dfs(0, -1, par1, dist1);
  dfs(N - 1, -1, parn, distn);
  for (i = 1; i < N; i++) dset.insert({distn[i], i});
  if (max(count(0, parn[0]), count(N - 1, par1[N - 1])) >= 3) {
    for (i = 0; i < M; i++) cout << dist1[N - 1] << endl;
    return 0;
  }
  dfs2(0, true);
  for (i = 0; i < M; i++) {
    int x;
    scanf("%d", &x);
    cout << min(dist1[N - 1], mx + x) << endl;
  }
  return 0;
}
