#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <queue>
using namespace std;
const int N=100010;
struct node
{
long long v;
int p;
node(long long a,int b):v(a),p(b){}
bool operator < (const node &a) const
{
return v>a.v;
}
};
priority_queue<node> q;
int head[N],ver[N<<1],edge[N<<1],next[N<<1],tot;
long long dis[N],deep[N],a[N],b[N],cnta,cntb;
void add(int x,int y,int z)
{
ver[++tot]=y,edge[tot]=z,next[tot]=head[x],head[x]=tot;
}
void dfs(int x,int fa)
{
for(int i=head[x];i;i=next[i])
{
int y=ver[i],z=edge[i];
if(y==fa) continue;
dis[y]=-dis[x]+z,deep[y]=deep[x]+1;
dfs(y,x);
}
}
int main()
{
int n,k;
cin>>n>>k;
for(int i=1;i<=n-1;i++)
{
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
dfs(1,0);
for(int i=1;i<=n;i++)
if(deep[i]&1) a[++cnta]=dis[i];
else b[++cntb]=dis[i];
sort(b+1,b+cntb+1);
for(int i=1;i<=cnta;i++) q.push(node(a[i]+b[1],i));
for(int i=1;i<=cnta;i++) head[i]=1;
while(k>1)
{
node t=q.top();
q.pop();
if((++head[t.p])<=cntb) q.push(node(a[t.p]+b[head[t.p]],t.p));