#include #include #include #include #define pe pair #define fi first #define se second #define mp make_pair using namespace std; const int MAX_N = 100100; const int INF = 1e9; vector A[MAX_N]; bool viz[MAX_N]; vector st; long long k, cnt; int sVal; void dfs(int nod, int sum = 0) { viz[nod] = true; st.push_back(sum); int poz = lower_bound(st.begin(), st.end(), sum - sVal) - st.begin(); cnt += st.size() - poz - 1; for(auto it : A[nod]) { if(!viz[it.fi]) { dfs(it.fi, sum + it.se); } } st.pop_back(); } bool check(int val) { memset(viz, 0, sizeof(viz)); sVal = val; cnt = 0; dfs(1); //cout << val << ' ' << cnt << '\n'; return cnt >= k; } int search(int st, int dr) { int ans = -1; while(st <= dr) { int mij = (st + dr) / 2; if(check(mij)) { ans = mij; dr = mij - 1; } else { st = mij + 1; } } return ans; } int main() { int n; cin >> n >> k; for(int i = 1; i < n; i++) { int a, b, c; cin >> a >> b >> c; A[a].push_back(mp(b, c)); A[b].push_back(mp(a, c)); } st.push_back(-2 * INF); cout << search(0, INF); return 0; }