#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
const int maxn=2e6;
int head[maxn<<1];
int nxt[maxn<<1];
int val[maxn<<1];
int to[maxn<<1];
int cnt=0;
int dp[maxn];
int size[maxn];
int dis[maxn];
int rev[maxn];
int res[maxn];
int vis[maxn];
int q[maxn];
int tot=0;
int pd[maxn];
int step[maxn];
int ans=LONG_LONG_MAX;
int fl=0;
int sum=0;
int root;
void add(int u,int v,int w)
{
cnt++;
to[cnt]=v;
val[cnt]=w;
nxt[cnt]=head[u];
head[u]=cnt;
}
void getroot(int u,int fa)
{
size[u]=1;
dp[u]=0;
for(int i=head[u];i;i=nxt[i])
{
int v=to[i];
if(v==fa||vis[v]) continue;
getroot(v,u);
size[u]+=size[v];
dp[u]=max(dp[u],size[v]);
}
dp[u]=max(dp[u],sum-size[u]);
if(dp[u]<dp[root])
{
root=u;
}
}
void getdis(int u,int fa)
{
if(dis[u]<=k)
{
rev[++tot]=dis[u];
res[tot]=step[u];
}
for(int i=head[u];i;i=nxt[i])
{
int v=to[i];
if(v==fa||vis[v]) continue;
dis[v]=dis[u]+val[i];
step[v]=step[u]+1;
getdis(v,u);
}
}
void doit(int u)
{
int c=0;
for(int i=head[u];i;i=nxt[i])
{
int v=to[i];
if(vis[v]) continue;
tot=0;
dis[v]=val[i];
step[v]=1;
getdis(v,u);
for(int j=1;j<=tot;j++)
{
if(k>=rev[j]&&(pd[k-rev[j]]||k==rev[j]))
{
fl=1;
ans=min(ans,res[j]+res[pd[k-rev[j]]]);
}
}
for(int j=1;j<=tot;j++)
{
q[++c]=rev[j];
pd[rev[j]]=j;
}
}
for(int i=1;i<=c;i++)
{
pd[q[i]]=0;
}
}
void solve(int u)
{
vis[u]=1;
doit(u);
for(int i=head[u];i;i=nxt[i])
{
int v=to[i];
if(vis[v]) continue;
dp[0]=n;
sum=size[v];
root=0;
getroot(v,u);
solve(root);
}
}
signed main()
{
freopen("p4149_1.in","r",stdin);
cin>>n>>k;
dp[0]=sum=n;
for(int i=1;i<n;i++)
{
int u,v,w;
cin>>u>>v>>w;
u++,v++;
add(u,v,w);
add(v,u,w);
}
getroot(1,0);
solve(root);
if(!fl)
{
cout<<-1;
return 0;
}
cout<<ans;
return 0;
}