#include <bits/stdc++.h>
#include "race.h"
using namespace std;
int ans = 1e9;
constexpr int N = 2e5+3;
bool vis[N];
int sz[N];
pair<int,int> dep[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;
}
int ctr = 0;
void getdep(int v,int p,int cd,int cl){
stack<array<int,4>> st;
st.push({v,p,cd,cl});
while(!st.empty()){
auto [vi,pi,cdi,cli]=st.top();st.pop();
dep[ctr++]={cdi,cli};
for(auto [ui,li]:g[vi]){
if(!vis[ui] && ui!=pi && cdi+1<ans && cli+li<=k)st.push({ui,vi,cdi+1,cli+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]){
if(li>k)continue;
ctr = 0;
getdep(i,c,1,li);
for(int j = 0;j<ctr;j++){
auto [dp,ln]=dep[j];
if(lu[k-ln]==c)ans = min(ans,mn[k-ln]+dp);
}
for(int j = 0;j<ctr;j++){
auto [dp,ln]=dep[j];
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);
}