#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 300002;
const int64_t INF = 1e18;
const int LG_N = 19;
int n, nQuery, l[MAX_N], p2[MAX_N], p[LG_N + 2][MAX_N];
bool on_path[MAX_N];
int64_t depth[MAX_N];
vector<pair<int, int> > g[MAX_N];
set<pair<int, int> > edge;
int read_int() {
  char c;
  for (c = getchar(); c < '0' || c > '9'; c = getchar())
    ;
  int res = c - '0';
  for (c = getchar(); '0' <= c && c <= '9'; c = getchar())
    res = res * 10 + c - '0';
  return res;
}
void enter() {
  n = read_int();
  nQuery = read_int();
  for (int i = 1; i < n; ++i) {
    int u = read_int();
    int v = read_int();
    int w = read_int();
    g[u].push_back(make_pair(v, w));
    g[v].push_back(make_pair(u, w));
    edge.insert(make_pair(u, v));
    edge.insert(make_pair(v, u));
  }
}
void fix_root(int u) {
  for (int i = 0; i < g[u].size(); ++i) {
    int v = g[u][i].first, w = g[u][i].second;
    if (v != p[0][u]) {
      p[0][v] = u;
      l[v] = l[u] + 1;
      depth[v] = depth[u] + w;
      fix_root(v);
    }
  }
}
void init_lca() {
  for (int i = 1; i <= LG_N; ++i)
    for (int j = 1; j <= n; ++j) p[i][j] = p[i - 1][p[i - 1][j]];
}
bool mark_path_from_1_to_N(int u) {
  if (u == n) {
    on_path[u] = true;
    return true;
  }
  for (int i = 0; i < g[u].size(); ++i) {
    int v = g[u][i].first;
    if (v != p[0][u] && mark_path_from_1_to_N(v)) {
      on_path[u] = true;
      return true;
    }
  }
  return false;
}
int first_anc_on_path(int u) {
  for (int k = LG_N; k >= 0; --k) {
    if (p[k][u] != 0 && !on_path[p[k][u]]) u = p[k][u];
  }
  return on_path[u] ? u : p[0][u];
}
int64_t extra_edge() {
  vector<pair<int64_t, int> > b;
  set<pair<int64_t, int> > s;
  int64_t res = -INF;
  for (int i = 1; i <= n; ++i) {
    p2[i] = first_anc_on_path(i);
    b.push_back(make_pair(depth[p2[i]], i));
  }
  sort(b.begin(), b.end());
  for (int i = 0; i < b.size(); ++i) {
    int u = b[i].second, w = b[i].first;
    for (set<pair<int64_t, int> >::reverse_iterator it = s.rbegin();
         it != s.rend(); ++it) {
      int v = it->second, w = it->first;
      if (!edge.count(make_pair(u, v))) {
        res = max(res, depth[u] + it->first - 2 * depth[p2[u]]);
        break;
      }
    }
    s.insert(make_pair(depth[u], u));
  }
  return res;
}
int64_t dist_from_1_to_N(int u) {
  if (u == n) return 0;
  for (int i = 0; i < g[u].size(); ++i) {
    int v = g[u][i].first, w = g[u][i].second;
    if (v != p[0][u]) {
      int64_t tmp = dist_from_1_to_N(v);
      if (tmp != -1) return tmp + w;
    }
  }
  return -1;
}
void solve() {
  int64_t tmp1 = dist_from_1_to_N(1), tmp2 = extra_edge();
  while (nQuery--) {
    int x = read_int();
    cout << min(tmp1, tmp1 + tmp2 + x) << '\n';
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  enter();
  l[1] = 1;
  fix_root(1);
  init_lca();
  mark_path_from_1_to_N(1);
  solve();
}
