#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 100;
int n, q;
vector<pair<long long, int> > g[N];
void dfs(int u, int p, vector<long long> &d, long long dist) {
  d[u] = dist;
  for (auto pp : g[u]) {
    int v = pp.first;
    int w = pp.second;
    if (v != p) {
      dfs(v, u, d, dist + w);
    }
  }
}
vector<long long> d1, dn;
bool cmp(int a, int b) { return d1[a] - dn[a] < d1[b] - dn[b]; }
int main() {
  ios::sync_with_stdio(0);
  cin.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});
  }
  d1 = vector<long long>(n);
  dn = vector<long long>(n);
  dfs(0, -1, d1, 0);
  dfs(n - 1, -1, dn, 0);
  vector<int> idx(n);
  vector<long long> val(n);
  for (int i = 0; i < n; i++) {
    idx[i] = i;
    val[i] = d1[i] - dn[i];
  }
  sort(idx.begin(), idx.end(), cmp);
  vector<bool> on(n);
  long long maxi = 0;
  set<pair<long long, int> > S;
  for (int i = n - 1; i >= 0; i--) {
    int u = idx[i];
    for (auto pp : g[u]) {
      int v = pp.first;
      if (on[v]) {
        S.erase(pair<long long, int>(dn[v], v));
      }
    }
    if (S.size()) {
      int v = S.rbegin()->second;
      maxi = max(maxi, d1[u] + dn[v]);
    }
    for (auto pp : g[u]) {
      int v = pp.first;
      if (on[v]) {
        S.insert(pair<long long, int>(dn[v], v));
      }
    }
    on[u] = true;
    S.insert(pair<long long, int>(dn[u], u));
  }
  for (; q; q--) {
    int w;
    cin >> w;
    cout << min(d1[n - 1], maxi + w) << '\n';
  }
}
