#include <bits/stdc++.h>
#include "race.h"
using namespace std;
int ans = 1e9;
constexpr int N = 2e5+3;
bool vis[N];
int sz[N];
vector<pair<int,int>> g[N];
int n,k;
void getsz(int v,int p){
sz[v]=1;
for(auto [i,tm]:g[v]){
if(i!=p && !vis[i]){
getsz(i,v);
sz[v]+=sz[i];
}
}
}
int getcent(int v,int p,int ttl){
for(auto [i,tm]:g[v]){
if(i!=p && !vis[i] && sz[i]>ttl/2)return getcent(i,v,ttl);
}
return v;
}
void getdep(int v,int p,vector<pair<int,int>> &dep,int cd,int cl){
if(cl>k || cd>ans)return;
dep.push_back({cd,cl});
for(auto [i,li]:g[v]){
if(i!=p && !vis[i]){
getdep(i,v,dep,cd+1,cl+li);
}
}
}
int lu[(int)1e6+2],mn[(int)1e6+2];
void solvecent(int v){
getsz(v,-1);
int c = getcent(v,-1,sz[v]);
vis[c]=1;
lu[0]=c;
mn[0]=0;
for(auto [i,li]:g[c]){
vector<pair<int,int>> dep;
getdep(i,c,dep,1,li);
for(auto [dp,ln]:dep){
if(lu[k-ln]==c)ans = min(ans,mn[k-ln]+dp);
}
for(auto [dp,ln]:dep){
if(lu[ln]!=c)lu[ln]=c,mn[ln]=1e9;
mn[ln] = min(mn[ln],dp);
}
}
for(auto [i,li]:g[c]){
if(!vis[i])solvecent(i);
}
}
int best_path(int ni, int ki, int H[][2], int L[])
{
for(int i = 0;i<ni-1;i++)g[H[i][0]].push_back({H[i][1],L[i]}),g[H[i][1]].push_back({H[i][0],L[i]});
n = ni,k = ki;
memset(lu,-1,sizeof(lu));
solvecent(0);
return (ans==1e9?-1:ans);
}