#include<bits/stdc++.h> using namespace std; long long MX, N, dis, rv[100009], stk[100009], H[100009], h[100009], aib[100009]; long long K, knt; vector < pair < long long, long long > > v[100009]; vector < long long > fii[100009]; pair < long long, long long > nor[100009]; void dfs (long long nod, long long tata) { for (vector < pair < long long, long long > > :: iterator it = v[nod].begin (); it != v[nod].end (); it ++) if (it->first != tata) H[it->first] = H[nod] + it->second, dfs (it->first, nod), fii[nod].push_back (it->first); } void Update (long long pos, long long val) { while (pos <= dis) aib[pos] += val, pos += pos - (pos & (pos - 1)); } long long Query (long long pos) { long long sum = 0; while (pos) sum += aib[pos], pos &= pos - 1; return sum; } void solve (long long nod) { long long p = 1, u = dis, mij, ras = dis + 1, lim = H[nod] - MX; while (p <= u) { mij = (p + u) >> 1; if (rv[mij] >= lim) ras = mij, u = mij - 1; else p = mij + 1; } knt += Query (dis - ras + 1); Update (dis - h[nod] + 1, +1); for (vector < long long > :: iterator it = fii[nod].begin (); it != fii[nod].end (); it ++) solve (*it); Update (dis - h[nod] + 1, -1); } long long Knt (long long val) { MX = val, knt = 0; solve (1); for (int i=1; i<=dis; i++) aib[i] = 0; return knt; } int main() { //freopen ("input", "r", stdin); //freopen ("output", "w", stdout); scanf ("%lld %lld", &N, &K); for (int i=1; i<N; i++) { long long x, y, z; scanf ("%lld %lld %lld", &x, &y, &z); v[x].push_back (make_pair (y, z)), v[y].push_back (make_pair (x, z)); } dfs (1, -1); for (int i=1; i<=N; i++) nor[i] = make_pair (H[i], i); sort (nor + 1, nor + N + 1); for (int i=1; i<=N; i++) { if (i == 1 || nor[i].first != nor[i - 1].first) rv[++dis] = nor[i].first; h[nor[i].second] = dis; } //printf ("%lld\n", Knt (5)); long long p = 0, u = 1LL << 45, mij, ras = -1; while (p <= u) { mij = (p + u) >> 1; // printf ("%d -> %lld\n", mij, Knt (mij)); if (Knt (mij) >= K) ras = mij, u = mij - 1; else p = mij + 1; } printf ("%lld\n", ras); return 0; }