#include <bits/stdc++.h>
template <typename T>
inline T max(T a, T b) {
  return a > b ? a : b;
}
template <typename T>
inline T min(T a, T b) {
  return a < b ? a : b;
}
template <typename T>
inline T abs(T a) {
  return a > 0 ? a : -a;
}
template <typename T>
inline bool repr(T &a, T b) {
  return a < b ? a = b, 1 : 0;
}
template <typename T>
inline bool repl(T &a, T b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T>
inline T gcd(T a, T b) {
  T t;
  if (a < b) {
    while (a) {
      t = a;
      a = b % a;
      b = t;
    }
    return b;
  } else {
    while (b) {
      t = b;
      b = a % b;
      a = t;
    }
    return a;
  }
}
template <typename T>
inline T sqr(T x) {
  return x * x;
}
struct Cg {
  inline char operator()() { return getchar(); }
};
struct Cp {
  inline void operator()(char x) { putchar(x); }
};
inline bool IS(char x) { return x == 10 || x == 13 || x == ' '; }
template <typename T>
struct Fr {
  T P;
  inline Fr &operator,(int &x) {
    x = 0;
    unsigned char t = P();
    while ((t < '0' || t > '9') && t != '-') t = P();
    bool f = 0;
    if (t == '-') t = P(), f = 1;
    x = t - '0';
    for (t = P(); t >= '0' && t <= '9'; t = P()) x = x * 10 + t - '0';
    if (f) x = -x;
    return *this;
  }
  inline operator int() {
    int x;
    *this, x;
    return x;
  }
  inline Fr &operator,(long long &x) {
    x = 0;
    unsigned char t = P();
    while ((t < '0' || t > '9') && t != '-') t = P();
    bool f = 0;
    if (t == '-') t = P(), f = 1;
    x = t - '0';
    for (t = P(); t >= '0' && t <= '9'; t = P()) x = x * 10 + t - '0';
    if (f) x = -x;
    return *this;
  }
  inline operator long long() {
    long long x;
    *this, x;
    return x;
  }
  inline Fr &operator,(char &x) {
    for (x = P(); IS(x); x = P())
      ;
    return *this;
  }
  inline operator char() {
    char x;
    *this, x;
    return x;
  }
  inline Fr &operator,(char *x) {
    char t = P();
    for (; IS(t); t = P())
      ;
    if (~t) {
      for (; !IS(t) && ~t; t = P()) *x++ = t;
    }
    *x++ = 0;
    return *this;
  }
  inline Fr &operator,(double &x) {
    x = 0;
    unsigned char t = P();
    while ((t < '0' || t > '9') && t != '-') t = P();
    bool f = 0;
    if (t == '-') t = P(), f = 1;
    x = t - '0';
    for (t = P(); t >= '0' && t <= '9'; t = P()) x = x * 10 + t - '0';
    if (t == '.') {
      double u = 0.1;
      for (t = P(); t >= '0' && t <= '9'; t = P(), u *= 0.1) x += u * (t - '0');
    }
    if (f) x = -x;
    return *this;
  }
  inline operator double() {
    double x;
    *this, x;
    return x;
  }
  inline Fr &operator,(long double &x) {
    x = 0;
    unsigned char t = P();
    while ((t < '0' || t > '9') && t != '-') t = P();
    bool f = 0;
    if (t == '-') t = P(), f = 1;
    x = t - '0';
    for (t = P(); t >= '0' && t <= '9'; t = P()) x = x * 10 + t - '0';
    if (t == '.') {
      double u = 0.1;
      for (t = P(); t >= '0' && t <= '9'; t = P(), u *= 0.1) x += u * (t - '0');
    }
    if (f) x = -x;
    return *this;
  }
  inline operator long double() {
    long double x;
    *this, x;
    return x;
  }
  inline Fr &operator,(unsigned int &x) {
    x = 0;
    unsigned char t = P();
    while (t < '0' || t > '9') t = P();
    x = t - '0';
    for (t = P(); t >= '0' && t <= '9'; t = P()) x = x * 10 + t - '0';
    return *this;
  }
  inline operator unsigned int() {
    unsigned int x;
    *this, x;
    return x;
  }
  inline Fr &operator,(unsigned long long &x) {
    x = 0;
    unsigned char t = P();
    while (t < '0' || t > '9') t = P();
    x = t - '0';
    for (t = P(); t >= '0' && t <= '9'; t = P()) x = x * 10 + t - '0';
    return *this;
  }
  inline operator unsigned long long() {
    unsigned long long x;
    *this, x;
    return x;
  }
};
Fr<Cg> in;
template <typename T>
struct Fw {
  T P;
  inline Fw &operator,(int x) {
    if (x) {
      if (x < 0) P('-'), x = -x;
      unsigned char s[10], c = 0;
      while (x) s[c++] = x % 10 + '0', x /= 10;
      while (c--) P(s[c]);
    } else
      P('0');
    return *this;
  }
  inline Fw &operator()(int x) {
    if (x) {
      if (x < 0) P('-'), x = -x;
      unsigned char s[10], c = 0;
      while (x) s[c++] = x % 10 + '0', x /= 10;
      while (c--) P(s[c]);
    } else
      P('0');
    return *this;
  }
  inline Fw &operator,(unsigned int x) {
    if (x) {
      unsigned char s[10], c = 0;
      while (x) s[c++] = x % 10 + '0', x /= 10;
      while (c--) P(s[c]);
    } else
      P('0');
    return *this;
  }
  inline Fw &operator()(unsigned int x) {
    if (x) {
      unsigned char s[10], c = 0;
      while (x) s[c++] = x % 10 + '0', x /= 10;
      while (c--) P(s[c]);
    } else
      P('0');
    return *this;
  }
  inline Fw &operator,(long long x) {
    if (x) {
      if (x < 0) P('-'), x = -x;
      unsigned char s[19], c = 0;
      while (x) s[c++] = x % 10 + '0', x /= 10;
      while (c--) P(s[c]);
    } else
      P('0');
    return *this;
  }
  inline Fw &operator()(long long x) {
    if (x) {
      if (x < 0) P('-'), x = -x;
      unsigned char s[19], c = 0;
      while (x) s[c++] = x % 10 + '0', x /= 10;
      while (c--) P(s[c]);
    } else
      P('0');
    return *this;
  }
  inline Fw &operator,(unsigned long long x) {
    if (x) {
      unsigned char s[20], c = 0;
      while (x) s[c++] = x % 10 + '0', x /= 10;
      while (c--) P(s[c]);
    } else
      P('0');
    return *this;
  }
  inline Fw &operator()(unsigned long long x) {
    if (x) {
      unsigned char s[20], c = 0;
      while (x) s[c++] = x % 10 + '0', x /= 10;
      while (c--) P(s[c]);
    } else
      P('0');
    return *this;
  }
  inline Fw &operator,(char x) {
    P(x);
    return *this;
  }
  inline Fw &operator()(char x) {
    P(x);
    return *this;
  }
  inline Fw &operator,(const char *x) {
    while (*x) P(*x++);
    return *this;
  }
  inline Fw &operator()(const char *x) {
    while (*x) P(*x++);
    return *this;
  }
  inline Fw &operator()(double x, int y) {
    if (y) {
      double t = 0.5;
      for (int i = y; i--;) t *= 0.1;
      if (x >= 0)
        x += t;
      else
        x -= t, P('-');
      *this, (long long)(abs(x));
      P('.');
      if (x < 0) x = -x;
      while (y--) {
        x *= 10;
        x -= floor(x * 0.1) * 10;
        P(((int)x) % 10 + '0');
      }
    } else if (x >= 0)
      *this, (long long)(x + 0.5);
    else
      *this, (long long)(x - 0.5);
    ;
    return *this;
  }
  inline Fw &operator()(long double x, int y) {
    if (y) {
      double t = 0.5;
      for (int i = y; i--;) t *= 0.1;
      if (x >= 0)
        x += t;
      else
        x -= t, P('-');
      *this, (long long)(abs(x));
      P('.');
      if (x < 0) x = -x;
      while (y--) {
        x *= 10;
        x -= floor(x * 0.1) * 10;
        P(((int)x) % 10 + '0');
      }
    } else if (x >= 0)
      *this, (long long)(x + 0.5);
    else
      *this, (long long)(x - 0.5);
    ;
    return *this;
  }
};
Fw<Cp> out;
const int N = 3e5 + 7;
int n, m;
int nb_data[N * 2];
int *nb[N] = {
    NULL,
    nb_data,
};
int cnt[N];
int tcnt[N];
long long d1[N];
bool inpath[N];
std::map<std::pair<int, int>, int> map;
int path_lenghth(int r, int p, int t) {
  if (r == t) return 0;
  int reach = -1, sub_reach, curr;
  for (int i = 0, iend = cnt[r]; i < iend; i++) {
    int c = nb[r][i];
    if (c == p) continue;
    if ((sub_reach = path_lenghth(c, r, t)) != -1) {
      reach = sub_reach +
              map[((r < c) ? std::make_pair(r, c) : std::make_pair(c, r))];
    }
  }
  return reach;
}
bool pre_cal_path_length_upto_t(int r, int p, long long *dest, int t,
                                bool *on_path) {
  bool reach = false;
  if (r == t) {
    on_path[r] = true;
    return true;
  }
  for (int i = 0, iend = cnt[r]; i < iend; i++) {
    int c = nb[r][i];
    if (c == p) continue;
    dest[c] +=
        dest[r] + map[((r < c) ? std::make_pair(r, c) : std::make_pair(c, r))];
    if (pre_cal_path_length_upto_t(c, r, dest, t, on_path)) {
      on_path[r] = true;
      reach = true;
    }
  }
  return reach;
}
long long cal_reduce_amount(int r, int t, long long *path_lenghth,
                            bool *on_path) {
  pre_cal_path_length_upto_t(r, -1, path_lenghth, t, on_path);
  long long res = -1e11, diff, other, prev = 0, pprev = 0, opt;
  int p = -1, s, c;
  const int root = r;
  bool is_root = true, is_target = false, parent_empty_other = true;
  while (res < 0 && !is_target) {
    is_target = (r == t);
    int nc = cnt[r] - !is_root;
    if (nc > 2 - is_target) {
      res = 0;
      goto efg;
    }
    s = -1;
    for (int i = 0, iend = cnt[r]; i < iend; i++) {
      int tmp = nb[r][i];
      if (tmp == p) continue;
      if (on_path[tmp])
        c = tmp;
      else
        s = tmp;
    }
    if (s == -1) {
      other = 0;
    } else if (cnt[s] > 1) {
      res = 0;
      goto efg;
    } else {
      other = map[((r < s) ? std::make_pair(r, s) : std::make_pair(s, r))];
    }
    opt = pprev;
    pprev = prev;
    prev = max(prev, other + path_lenghth[r]);
    if (other > 0 || !parent_empty_other) {
      opt = pprev;
    }
    if (is_root || (p == root && other == 0 && parent_empty_other)) {
    } else {
      res = max(res, opt + other - path_lenghth[r]);
    }
  efg:;
    parent_empty_other = (other == 0);
    p = r, r = c;
    if (is_root) is_root = !is_root;
  }
  return res;
}
int main() {
  in, n, m;
  int v, u, w;
  for (int i = 0, iend = n - 1; i < iend; i++) {
    in, v, u, w;
    cnt[v]++, cnt[u]++;
    map[((v < u) ? std::make_pair(v, u) : std::make_pair(u, v))] = w;
  }
  for (int i = 1, iend = n; i <= iend; i++) {
    nb[i + 1] = nb[i] + cnt[i];
  }
  for (auto const vuw : map) {
    v = vuw.first.first, u = vuw.first.second;
    nb[v][tcnt[v]++] = u;
    nb[u][tcnt[u]++] = v;
  }
  long long diff = cal_reduce_amount(1, n, d1, inpath);
  for (int i = 0, iend = m; i < iend; i++) {
    in, w;
    out, d1[n] + min(0LL, w + diff), '\n';
  }
}
