#include <bits/stdc++.h> #define mp make_pair #define f first #define s second typedef long long ll; using namespace std; const int N=1e5+10; const int LogN=20; ll k; int cost[N][LogN], st[N][LogN]; vector<pair<int, int> > g[N]; int n; void dfs (int v, int prev) { for (auto xt: g[v]) { if (xt.f==prev) continue; cost[xt.f][0]=xt.s; st[xt.f][0]=v; dfs (xt.f, v); } } void init () { for (int d=1;d<19;d++) { for (int i=1;i<=n;i++) { st[i][d]=st[st[i][d-1]][d-1]; cost[i][d]=cost[i][d-1]+cost[st[i][d-1]][d-1]; } } } int climb (int v, ll x) { if (st[v][0]==0 || cost[v][0]>x) return 0; int d=0; while (st[v][d+1]!=0 && cost[v][d+1]<=x) d++; return climb(st[v][d], x-cost[v][d])+(1<<d); } ll solve (ll x) { ll ret=0; for (int i=2;i<=n;i++) ret+=climb (i, x); return ret; } int main() { scanf ("%d%d", &n, &k); for (int i=1;i<n;i++) { int a, b, w; scanf ("%d%d%d", &a, &b, &w); g[a].push_back(mp(b, w)); g[b].push_back(mp(a, w)); } dfs (1, 1); init(); ll l=0, r=1e12, mid, sol=-1; while (l<=r) { mid=l+(r-l)/2; if (solve(mid)>=k) { sol=mid; r=mid-1; } else l=mid+1; } printf ("%lld", sol); return 0; }