#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,rt,m,k;
int sz[200005],dp[200005],dis[200005],dep[200005],tot,all,res=1e9;
int ask[105],pmt[200005];
unordered_map<int,int> exs;
bool vis[200005],ans[10];
vector<pair<int,int> > e[200005];
pair<int,int> ddis[200005];
void find_rt(int fat,int p){
dp[p]=0;
sz[p]=1;
for(auto q:e[p]){
int to=q.first;
if(to==fat||vis[to])continue;
find_rt(p,to);
sz[p]+=sz[to];
dp[p]=max(dp[p],sz[to]);
}
dp[p]=max(dp[p],all-sz[p]);
if(dp[p]<dp[rt])rt=p;
}
void getdis(int p,int fat){
ddis[++tot]={dis[p],p};
for(auto q:e[p]){
int to=q.first,val=q.second;
if(to==fat||vis[to])continue;
dis[to]=dis[p]+val;
dep[to]=dep[p]+1;
getdis(to,p);
}
}
void calc(int p){
int otto=0;
for(auto q:e[p]){
int to=q.first,val=q.second;
if(vis[to])continue;
tot=0;
dis[to]=val;
dep[to]=1;
getdis(to,p);
for(int i=tot;i;i--){
for(int j=1;j<=m;j++){
if(ask[j]>=ddis[i].first){
ans[j]|=(exs[ask[j]-ddis[i].first]>0);
if(exs[ask[j]-ddis[i].first]){
res=min(res,dep[ddis[i].second]+dep[exs[ask[j]-ddis[i].first]]);
}
}
}
}
for(int i=tot;i;i--){
pmt[++otto]=ddis[i].first,exs[ddis[i].first]=ddis[i].second;
}
}
for(int i=otto;i;i--)exs[pmt[i]]=0;
}
void solve(int p){
vis[p]=exs[0]=1;
calc(p);
for(auto q:e[p]){
int to=q.first;
if(vis[to])continue;
all=sz[to];
dp[rt=0]=1e9;
find_rt(0,to);
solve(rt);
}
}
signed main(){
cin>>n>>k;
for(int i=1;i<n;i++){
int u,v,w;
cin>>u>>v>>w;u++,v++;
e[u].push_back({v,w});
e[v].push_back({u,w});
}
m=1,ask[1]=k;
all=n;
dp[rt=0]=n;
find_rt(0,1);
solve(rt);
cout<<(ans[1]?res:-1);
return 0;
}