WA on #2,#5,#6,#7,80pts
#include<bits/stdc++.h>
using namespace std;
#define _r return*this
#define _o &operator
namespace IO
{
const int _S=1<<21;
char b[_S],*p1=b,*p2=b,pb[_S],*pp=pb;
void fl(){fwrite(pb,1,pp-pb,stdout),pp=pb;}
struct input
{
char gc(){if(p1==p2)p2=(p1=b)+fread(b,1,_S,stdin);return p1==p2?' ':*p1++;}
input _o>>(char&num){do num=gc();while(num==' '||num=='\n'||num=='\r'||num=='\t');_r;}
template<typename T>input _o>>(T&x)
{
char c=gc();T f=1;
for(x=0;!isdigit(c);)(c=='-'?f=-1:1),c=gc();
while(isdigit(c))x=(x*10)+(c^48),c=gc();
x*=f;_r;
}
input(){}
}in;
struct output
{
void pt(char num){*pp++=num;if(pp-pb==_S)fl();}
output _o<<(char num){pt(num);_r;}
template<typename T>output _o<<(T x)
{
if(!x){pt(48);_r;}
if(x<0)pt('-'),x=-x;
int s[64],t=0;
while(x)s[++t]=x%10,x/=10;
while(t)pt(s[t--]+48);
_r;
}
output _o<<(const char*s){int num=0;while(s[num])pt(s[num++]);_r;}
output(){}
}out;
struct fe{~fe(){fl();}}fls;
int read(){int x;return in>>x,x;}
long long readll(){long long x;return in>>x,x;}
}
using IO::in;
using IO::out;
using IO::read;
using IO::readll;
using ll=long long;
using pii=pair<ll,ll>;
#define N 200001
ll n;
ll q,ans=1e9;
vector<pii>e[N];
bool vis[N];
ll sz[N],mx[N],rt;
void getCent(ll u,ll f,ll s)
{
sz[u]=1,mx[u]=0;
for(pii i:e[u])if(i.first!=f&&!vis[i.first])
getCent(i.first,u,s),sz[u]+=sz[i.first],mx[u]=max(mx[u],sz[i.first]);
mx[u]=max(mx[u],s-sz[u]);
if(!rt||mx[u]<mx[rt])rt=u;
}
ll a[N],cur;
ll d[N],b[N],dep[N];
void getDis(ll u,ll f,ll dis,ll t,ll rt)
{
a[++cur]=u,d[u]=dis,dep[u]=t,b[u]=rt;
for(pii i:e[u])if(i.first!=f&&!vis[i.first])getDis(i.first,u,dis+i.second,t+1,rt);
}
bool cmp(ll p,ll q)
{
if(d[p]==d[q])return dep[p]<dep[q];
return d[p]<d[q];
}
void calc(ll u)
{
a[cur=1]=u,d[u]=0,b[u]=u;
for(pii i:e[u])if(!vis[i.first])getDis(i.first,u,i.second,1,i.first);
sort(a+1,a+1+cur,cmp);
for(int l=1,r=cur;l<r;)
{
if(d[a[l]]+d[a[r]]>q)r--;
else if(d[a[l]]+d[a[r]]<q)l++;
else if(b[a[l]]==b[a[r]])
{
if(d[a[r]]==d[a[r-1]])r--;
else l++;
}
else
{
ans=min(ans,dep[a[l]]+dep[a[r]]);
break;
}
}
}
void slove(ll u)
{
vis[u]=true,calc(u);
for(pii i:e[u])if(!vis[i.first])rt=0,getCent(i.first,0,sz[i.first]),slove(rt);
}
ll x,y,z;
int main()
{
in>>n>>q,mx[0]=n;
for(int i=1;i<n;i++)in>>x>>y>>z,x++,y++,e[x].push_back({y,z}),e[y].push_back({x,z});
getCent(1,0,n),slove(rt),out<<(ans==1e9?-1:ans);
}