#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<pair<int, int>> g[300010];
char bl[300010];
vector<int> path;
long long full;
char onpath[300010];
char used[300100];
vector<pair<int, int>> have;
long long dn[300010];
struct Cmp1 {
  inline bool operator()(const int &lhs, const int &rhs) const {
    if (dn[lhs] != dn[rhs]) return dn[lhs] > dn[rhs];
    return lhs < rhs;
  }
};
set<int, Cmp1> q1;
long long d1[300010];
struct Cmp2 {
  inline bool operator()(const int &lhs, const int &rhs) const {
    if (d1[lhs] != d1[rhs]) return d1[lhs] > d1[rhs];
    return lhs < rhs;
  }
};
set<int, Cmp2> q2;
void dfs(int v, int par, long long di) {
  bl[v] = true;
  dn[v] = di;
  q1.insert(v);
  if (path.empty() || path.back() != 0) path.push_back(v);
  for (auto e : g[v]) {
    int to = e.first;
    int len = e.second;
    if (to && to != par) {
      dfs(to, v, di + len);
    } else if (to == 0) {
      path.push_back(0);
      full = di + len;
    }
  }
  if (path.back() != 0) path.pop_back();
}
void dfs1(int v, int par) {
  bl[v] = false;
  q1.erase(v);
  for (auto e : g[v]) {
    int to = e.first;
    if (to != par && !onpath[to]) {
      dfs1(to, v);
    }
  }
}
void dfs2(int v, int par, long long di) {
  used[v] = true;
  d1[v] = di;
  q2.insert(v);
  for (auto e : g[v]) {
    int to = e.first;
    int len = e.second;
    if (to != par && !bl[to] && !used[to]) {
      dfs2(to, v, di + len);
    }
  }
}
bool ok = false;
int cnt = 0;
void dfscheck(int v, int par) {
  cnt++;
  for (auto e : g[v]) {
    int to = e.first;
    if (to != par && !onpath[to]) {
      dfscheck(to, v);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 0; i < n - 1; i++) {
    int from, to, len;
    cin >> from >> to >> len;
    g[from - 1].push_back({to - 1, len});
    g[to - 1].push_back({from - 1, len});
    have.push_back({from - 1, to - 1});
    have.push_back({to - 1, from - 1});
  }
  sort(have.begin(), have.end());
  dfs(n - 1, -1, 0);
  for (auto u : path) onpath[u] = true;
  dfscheck(0, -1);
  if (cnt >= 3) ok = true;
  cnt = 0;
  dfscheck(n - 1, -1);
  if (cnt >= 3) ok = true;
  if (ok) {
    for (int i = 0; i < m; i++) {
      cout << full << '\n';
    }
    exit(0);
  }
  path.pop_back();
  dfs2(0, -1, 0);
  long long mx = 0;
  int prev = 0;
  while (!path.empty()) {
    int cnt2ok = 0;
    for (auto v1 : q1) {
      int cnt = 0;
      cnt2ok++;
      for (auto v2 : q2) {
        cnt++;
        auto it = lower_bound(have.begin(), have.end(), make_pair(v1, v2));
        if (it == have.end() || *it != make_pair(v1, v2)) {
          mx = max(mx, d1[v2] + dn[v1]);
        }
        if (cnt == 2) break;
      }
      if (cnt2ok == 2) break;
    }
    int v = path.back();
    path.pop_back();
    dfs1(v, -1);
    dfs2(prev, -1, d1[prev]);
    prev = v;
  }
  for (int i = 0; i < m; i++) {
    int t;
    cin >> t;
    cout << min(full, mx + t) << '\n';
  }
}
