#include<bits/stdc++.h>
using namespace std;
#define man max
#define men min
const int maxn = 2000010,INF = 40000001;
struct edge{
int to,v;
};
int n,k,a,b,c,rt,cnt;
int maxp[maxn],sz[maxn],vis[maxn],sp[maxn],spp[maxn],p[maxn],dis[maxn],diss[maxn],t[INF + 10],minn = INF;
vector<edge> G[maxn];
void getrt(int u,int sum,int fa)
{
sz[u] = 1;
maxp[u] = 0;
for(int i = 0;i < G[u].size();i++)
{
int now = G[u][i].to;
if(now == fa || vis[now]) continue;
getrt(now,sum,u);
sz[u] += sz[now];
maxp[u] = man(maxp[u],sz[now]);
}
maxp[u] = man(maxp[u],sum - sz[u]);
if(maxp[u] < maxp[rt]) rt = u;
return ;
}
void getdis(int u,int fa)
{
sp[++sp[0]] = dis[u];
spp[++spp[0]] = diss[u];
for(int i = 0;i < G[u].size();i++)
{
int now = G[u][i].to,vv = G[u][i].v;
if(now == fa || vis[now]) continue;
dis[now] = dis[u] + vv;
diss[now] = diss[u] + 1;
getdis(now,u);
}
return ;
}
void calc(int u)
{
cnt = 0;
for(int i = 0;i < G[u].size();i++)
{
int now = G[u][i].to,vv = G[u][i].v;
if(vis[now]) continue;
sp[0] = 0;
spp[0] = 0;
dis[now] = vv;
diss[now] = 1;
getdis(now,u);
for(int j = 1;j <= sp[0];j++)
{
if(t[k - sp[j]])
{
if(k - sp[j] == 0) minn = min(minn,spp[j]);
else minn = min(minn,spp[j] + t[k - sp[j]]);
}
}
for(int j = 1;j <= sp[0];j++)
{
p[++cnt] = sp[j];
t[sp[j]] = men(t[sp[j]],spp[j]);
}
}
for(int i = 1;i <= cnt;i++)
{
t[p[i]] = INF;
}
return ;
}
void solve(int u)
{
vis[u] = t[0] = 1;
calc(u);
for(int i = 0;i < G[u].size();i++)
{
int now = G[u][i].to;
if(vis[now]) continue;
rt = 0;
maxp[rt] = INF;
getrt(now,sz[now],u);
solve(rt);
}
return ;
}
signed main()
{
ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
cin >> n >> k;
for(int i = 1;i < n;i++)
{
cin >> a >> b >> c;
G[a + 1].push_back({b + 1,c});
G[b + 1].push_back({a + 1,c});
}
for(int i = 0;i <= INF;i++)
{
t[i] = INF;
}
rt = 0;
maxp[rt] = INF;
getrt(1,n,0);
solve(rt);
if(minn < INF) cout << minn;
return 0;
}