#include<bits/stdc++.h>
using namespace std;
const int maxn=4e6+10,inf=1e9;
int n,k,cnt,rt,num,ans=inf,mx[maxn],sz[maxn],dis[maxn];
int dep[maxn],mn[maxn],d1[maxn],d2[maxn];
bool vis[maxn];
queue<int> q;
struct edge
{
int u,v,w,nxt;
}e[maxn<<1];
int head[maxn];
inline void add(int x,int y,int z)
{
e[++cnt]=(edge){x,y,z,head[x]};
head[x]=cnt;
}
void init()
{
cin>>n>>k;
for(int i=1;i<n;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
for(int i=1;i<=k;i++) mn[i]=inf;
}
void getrt(int u,int f,int tot)
{
sz[u]=1;
mx[u]=0;
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].v;
if(v==f || vis[v]) continue;
getrt(v,u,tot);
sz[u]+=sz[v];
mx[u]=max(mx[u],sz[v]);
}
mx[u]=max(mx[u],tot-sz[u]);
if(mx[u]<mx[rt]) rt=u;
}
void getdis(int u,int f)
{
d1[++num]=dis[u];
d2[num]=dep[u];
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].v;
if(v==f || vis[v]) continue;
dis[v]=dis[u]+e[i].w;
dep[v]=dep[u]+1;
getdis(v,u);
}
}
void calc(int u)
{
mn[0]=0;
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].v;
if(vis[v]) continue;
dis[v]=e[i].w;
dep[v]=1;
num=0;
getdis(v,u);
for(int j=1;j<=num;j++)
if(k-d1[j]>=0)
ans=min(ans,mn[k-d1[j]]+d2[j]);
for(int j=1;j<=num;j++)
{
if(k-d1[j]<0) continue;
q.push(d1[j]);
mn[d1[j]]=min(mn[d1[j]],d2[j]);
}
}
while(q.size()) mn[q.front()]=inf,q.pop();
}
void solve(int u)
{
vis[u]=1;
calc(u);
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].v;
if(vis[v]) continue;
rt=0;
getrt(v,u,sz[v]);
solve(rt);
}
}
int main()
{
init();
mx[0]=inf;
getrt(1,0,n);
solve(rt);
if(ans==inf) cout<<-1;
else cout<<ans;
return 0;
}