#include <bits/stdc++.h>
using namespace std;
vector<vector<long long> > adj(312345), wt(312345);
vector<long long> vec, vec1;
int flag = 0;
stack<int> st;
int n;
long long dist[312345];
int dfs(int cur, int par) {
  if (!flag) {
    st.push(cur);
  }
  if (cur == n - 1) {
    flag = 1;
  }
  int i;
  for (i = 0; i < adj[cur].size(); i++) {
    if (adj[cur][i] != par) {
      dist[adj[cur][i]] = dist[cur] + wt[cur][i];
      dfs(adj[cur][i], cur);
    }
  }
  if (!flag) {
    st.pop();
  }
  return 0;
}
int cnt = 0;
int visit[312345];
int visdfs(int cur, int par) {
  cnt++;
  int i;
  for (i = 0; i < adj[cur].size(); i++) {
    if (adj[cur][i] != par && visit[adj[cur][i]] == 0) {
      visdfs(adj[cur][i], cur);
    }
  }
  return 0;
}
long long a[312345], b[312345], notpossible[312345];
int main() {
  std::ios::sync_with_stdio(false);
  int m;
  cin >> n >> m;
  int i, j;
  long long u, v, w;
  for (i = 0; i < n - 1; i++) {
    cin >> u >> v >> w;
    u--;
    v--;
    adj[u].push_back(v);
    adj[v].push_back(u);
    wt[u].push_back(w);
    wt[v].push_back(w);
  }
  dfs(0, -1);
  while (!st.empty()) {
    vec1.push_back(st.top());
    st.pop();
  }
  for (i = vec1.size() - 1; i >= 0; i--) {
    vec.push_back(vec1[i]);
    visit[vec1[i]] = 1;
  }
  int found = 0, elem;
  for (i = 0; i < vec.size(); i++) {
    cnt = 0;
    visdfs(vec[i], -1);
    if (cnt > 2) {
      found = 1;
      break;
    } else {
      elem = 0;
      for (j = 0; j < adj[vec[i]].size(); j++) {
        if (!visit[adj[vec[i]][j]]) {
          elem = wt[vec[i]][j];
        }
      }
      if (elem == 0) {
        notpossible[i] = 1;
      }
      a[i] = elem;
      b[i] = elem - dist[vec[i]];
    }
  }
  long long maxi = (1000 * 1000 * 1000 + 5);
  maxi *= (1000 * 1000 * 1000 + 5);
  maxi *= -1;
  multiset<long long> seti;
  multiset<long long>::iterator it;
  seti.insert(maxi);
  for (i = 0; i < vec.size() - 2; i++) {
    maxi = max(maxi, dist[vec[i]] - dist[vec[i + 2]] + a[i]);
    if (a[i] != 0) maxi = max(maxi, dist[vec[i]] - dist[vec[i + 1]] + a[i]);
  }
  i = vec.size() - 2;
  if (a[vec.size() - 2] != 0) {
    maxi = max(maxi, dist[vec[i]] - dist[vec[i + 1]] + a[i]);
  }
  for (i = 0; i < vec.size(); i++) {
    if (!notpossible[i]) {
      seti.insert(b[i]);
    }
  }
  long long val;
  for (i = 0; i < vec.size(); i++) {
    if (!notpossible[i]) {
      seti.erase(seti.find(b[i]));
    }
    it = seti.end();
    it--;
    val = *it + dist[vec[i]] + a[i];
    maxi = max(val, maxi);
  }
  long long gg;
  for (i = 0; i < m; i++) {
    cin >> gg;
    if (found) {
      cout << dist[n - 1] << endl;
    } else {
      cout << min(dist[n - 1], dist[n - 1] + maxi + gg) << endl;
    }
  }
  return 0;
}
