#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<vector<pair<int, long long>>> adj(300010);
vector<pair<long long, int>> reinsert(300010);
set<pair<int, int>> tog;
long long dist[300010];
long long dist2[300010];
bool isbad[300010];
bool isgone[300010];
void dfs(int u, int p) {
  for (pair<int, long long> nx : adj[u]) {
    if (nx.first == p) continue;
    dist[nx.first] = dist[u] + nx.second;
    dfs(nx.first, u);
  }
}
void dfs2(int u, int p) {
  for (pair<int, long long> nx : adj[u]) {
    if (nx.first == p) continue;
    dist2[nx.first] = dist2[u] + nx.second;
    dfs2(nx.first, u);
  }
}
int main() {
  fill(isbad, isbad + 300010, false);
  fill(isgone, isgone + 300010, false);
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> m;
  int v, u;
  long long w;
  for (int i = 0; i < n - 1; i++) {
    cin >> v >> u >> w;
    adj[v].push_back(make_pair(u, w));
    adj[u].push_back(make_pair(v, w));
  }
  dist[1] = 0;
  dfs(1, -1);
  dist2[n] = 0;
  dfs2(n, -1);
  vector<pair<long long, int>> stuff;
  for (int i = 1; i <= n; i++) {
    stuff.push_back(make_pair(dist[i], i));
  }
  sort(stuff.begin(), stuff.end());
  priority_queue<pair<long long, int>> dn;
  for (int i = 1; i <= n; i++) {
    dn.push(make_pair(dist2[i], i));
  }
  long long bigguy = 0LL;
  long long odist = dist[n];
  for (int i = 0; i < stuff.size(); i++) {
    int cn = stuff[i].second;
    isgone[cn] = true;
    long long cd = stuff[i].first;
    bool issat = false;
    reinsert.clear();
    for (pair<int, long long> pp : adj[cn]) {
      isbad[pp.first] = true;
    }
    while (!issat) {
      if (dn.size() == 0) break;
      int val = dn.top().second;
      if (isgone[val]) {
        dn.pop();
        continue;
      }
      if (isbad[val]) {
        reinsert.push_back(dn.top());
        dn.pop();
      } else {
        issat = true;
      }
    }
    for (pair<int, long long> pp : adj[cn]) {
      isbad[pp.first] = false;
    }
    if (!issat) {
      for (pair<long long, int> cx : reinsert) {
        dn.push(cx);
      }
      continue;
    }
    if (dn.size() == 0) continue;
    bigguy = max(bigguy, cd + dn.top().first);
    for (pair<long long, int> cx : reinsert) {
      dn.push(cx);
    }
  }
  long long x;
  while (m--) {
    cin >> x;
    if (bigguy + x > odist) {
      cout << odist << '\n';
      ;
    } else
      cout << bigguy + x << '\n';
  }
  cout.flush();
}
