#include <bits/stdc++.h>
using namespace std;
#define int long long
int c = -1;
vector<vector<pair<int,int>>>ls;
vector<int>vis;
int n;
int k;
int dfs(int v,int par){
if(c!=-1)return 0;
if(ls[v].size()==1&&par!=-1){
return 1;
}else{
int cnt = 0;
bool ify = true;
for(auto e : ls[v]){
if(e.first!=par&&vis[e.first] == false){
int cur = dfs(e.first,v);
if(cur<=n/2){
cnt+=cur;
}else{
ify = false;
}
}
}
if(ify == false||c!=-1)return cnt+1;
if(n-1-cnt<=n/2){
c = v;
}
return cnt+1;
}
}
int result = LLONG_MAX;
map<int,int>m_gen= {};
map<int,int>m_cur= {};
map<int,int>n_mgen ={};
void dfs2(int v,int par,int dis,int krw){
if(dis>k)return;
if(m_cur[dis]==0){
m_cur[dis] = krw;
n_mgen[dis] = krw;
}else{
m_cur[dis] = min(m_cur[dis],krw);
n_mgen[dis] = min(m_cur[dis],krw);
}
if(m_gen[k-dis]>0){
result = min(result,krw+m_gen[k-dis]);
}
if(dis == k){
result = min(result,krw);
}
for(auto e : ls[v]){
if(e.first!=par&&vis[e.first]==false){
dfs2(e.first,v,dis+e.second,krw+1);
}
}
}
int32_t main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>k;
ls.resize(n);
vis.resize(n,false);
for(int i = 0;i<n-1;i++){
int a,b,c;
cin>>a>>b>>c;
ls[a].push_back({b,c});
ls[b].push_back({a,c});
}
queue<int>q;
dfs(0,-1);
vis[c] = true;
for(auto e : ls[c]){
q.push(e.first);
dfs2(e.first,c,e.second,1);
m_gen = n_mgen;
m_cur.clear();
}
m_gen.clear();
n_mgen.clear();
while(!q.empty()){
auto e = q.front();
q.pop();
c = -1;
dfs(e,-1);
if(c==-1)break;
vis[c] = true;
for(auto e : ls[c]){
q.push(e.first);
dfs2(e.first,c,e.second,1);
m_gen = n_mgen;
m_cur.clear();
}
m_gen.clear();
n_mgen.clear();
}
if(result == LLONG_MAX){
cout<<-1<<endl;
return 0;
}
cout<<result<<endl;
return 0;
}