#include<bits/stdc++.h>
using namespace std;
int n,m,cnt;
int head[100010];
struct node{
int nxt,v,w;
inline void addedge(int u,int v,int w)
{
this->v=v;
this->w=w;
this->nxt=head[u];
head[u]=cnt;
}
}pnt[100010];
int l,r,mid;
int f[100010];
void dfs(int u,int root)
{
multiset<int>s;
for(int i=head[u]; i; i=pnt[i].nxt)
{
int v=pnt[i].v,w=pnt[i].w;
if(v==root)
continue;
dfs(v,u);
if(f[v]+w>=mid)
cnt++;
else s.insert(f[v]+w);
}
while(!s.empty())
{
multiset<int>::iterator it=s.begin();
s.erase(it);
multiset<int>::iterator it1=s.lower_bound(mid-*it);
if(it1==s.end())
f[u]=max(f[u],*it);
else s.erase(*it1),cnt++;
}
}
inline bool check()
{
memset(f,0,sizeof(f));
cnt=0;
dfs(1,0);
if(cnt<m)
return 0;
return 1;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1; i<n; ++i)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
pnt[++cnt].addedge(a,b,c);
pnt[++cnt].addedge(b,a,c);
r+=c;
l=min(l,c);
}
r/=m;
int ans=0;
while(l<=r)
{
mid=(l+r)>>1;
if(check())
ans=mid,l=mid+1;
else r=mid-1;
}
cout<<ans;
return 0;
}