#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn = 1e6;
const ll INF = 1e18;
using ld = double;
int n, q;
vector<pair<int, ll>> g[maxn];
vector<int> path, cur;
ll dist[maxn];
void dfs0(int v, int p) {
  cur.push_back(v);
  if (v == n - 1) path = cur;
  for (auto e : g[v])
    if (e.first != p) dist[e.first] = dist[v] + e.second, dfs0(e.first, v);
  cur.pop_back();
}
ll dep[maxn];
int was[maxn], any, curs;
void dfs1(int v) {
  curs++;
  for (auto e : g[v])
    if (!was[e.first]) {
      was[e.first] = 1;
      dep[e.first] = dep[v] + e.second;
      dfs1(e.first);
    }
}
ll opt = -INF, bst = -INF;
void dfs2(int v, int V, int p) {
  bst = max(bst, opt + dep[v] - dist[V]);
  for (auto e : g[v])
    if (!was[e.first] && p != e.first) dfs2(e.first, V, v);
}
void dfs3(int v, int V, int p) {
  if (v != V) opt = max(opt, dep[v] + dist[V]);
  for (auto e : g[v])
    if (!was[e.first] && p != e.first) dfs3(e.first, V, v);
}
void dfs4(int v, int V, int p) {
  if (v != V) bst = max(bst, opt + dep[v] - dist[V]);
  for (auto e : g[v])
    if (!was[e.first] && p != e.first) dfs4(e.first, V, v);
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> q;
  for (int i = 0; i < n - 1; i++) {
    int u, v, w;
    cin >> u >> v >> w;
    u--;
    v--;
    g[u].push_back({v, w});
    g[v].push_back({u, w});
  }
  dfs0(0, -1);
  for (int v : path) was[v] = 1;
  for (int v : path) {
    curs = 0, dfs1(v);
    if (curs > 2) any = 1;
  }
  memset(was, 0, sizeof(was));
  for (int v : path) was[v] = 1;
  int Y = -1;
  for (int v : path) {
    dfs2(v, v, -1);
    if (Y != -1) {
      opt = max(opt, dist[Y]);
      dfs4(v, v, -1);
    }
    Y = v;
    dfs3(v, v, -1);
  }
  if (any) bst = max(bst, 0LL);
  while (q--) {
    ll first;
    cin >> first;
    cout << min(dist[n - 1], dist[n - 1] + bst + first) << '\n';
  }
}
