#include <cstdio>
#include <vector>
using namespace std;
const int MaxN=200010,MaxK=1000010,inf=1000000000;
struct edge
{
int nod,l;
};
vector<edge> v[MaxN];
int size[MaxN],din[MaxK],dist[MaxN],niv[MaxN],q[MaxN],nr,centru,k,sol;
char elim[MaxN];
void dfs1(int nod,int tata,int n)
{
size[nod]=1;
int ok=1;
for(vector<edge>::iterator it=v[nod].begin();it!=v[nod].end();it++)
if(!elim[it->nod] && it->nod!=tata)
{
dfs1(it->nod,nod,n);
size[nod]+=size[it->nod];
if(size[it->nod]>n/2+1) ok=0;
}
if(ok && n-size[nod]<=n/2+1) centru=nod;
}
void dfs2(int nod,int tata,int d,int lev)
{
if(d>k) return;
q[++nr]=nod;
dist[nod]=d;
niv[nod]=lev;
for(vector<edge>::iterator it=v[nod].begin();it!=v[nod].end();it++)
if(!elim[it->nod] && it->nod!=tata)
dfs2(it->nod,nod,d+it->l,lev+1);
}
void rezolva(int rad)
{
nr=0;
for(vector<edge>::iterator it=v[rad].begin();it!=v[rad].end();it++)
if(!elim[it->nod])
{
int last=nr;
dfs2(it->nod,rad,it->l,1);
for(int i=last+1;i<=nr;i++)
{
if(k==dist[q[i]]) sol=min(sol,niv[q[i]]);
if(k>=dist[q[i]] && din[k-dist[q[i]]]) sol=min(sol,niv[din[k-dist[q[i]]]]+niv[q[i]]);
}
for(int i=last+1;i<=nr;i++)
if(din[dist[q[i]]]==0 || niv[q[i]]<niv[din[dist[q[i]]]]) din[dist[q[i]]]=q[i];
}
for(int i=1;i<=nr;i++)
din[dist[q[i]]]=0;
}
void solve(int nod,int n)
{
dfs1(nod,0,n);
int center=centru;
rezolva(center);
elim[center]=1;
for(vector<edge>::iterator it=v[center].begin();it!=v[center].end();it++)
if(!elim[it->nod])
if(size[it->nod]>size[center]) solve(it->nod,n-size[center]);
else solve(it->nod,size[it->nod]);
}
int main()
{
freopen("file.in", "r", stdin);
freopen("file.out", "w", stdout);
int n,x,y,l;
scanf("%d%d",&n,&k);
for(int i=1;i<n;i++)
{
scanf("%d%d%d",&x,&y,&l);x++;y++;
v[x].push_back({y,l});
v[y].push_back({x,l});
}
sol=inf;
solve(1,n);
if(sol==inf) sol=-1;
printf("%d",sol);
return 0;
}