#include<bits/stdc++.h>
using namespace std;
const int MAXN=5e4+7;
vector<pair<int,int>> g[MAXN];
int num=0,len[MAXN];
bool vis[MAXN];
void dfs(int x,int from,int mine)
{
vector<int> t;
for(int i(0);i<g[x].size();++i)
{
if(g[x][i].first!=from)
{
dfs(g[x][i].first,x,mine);
if(len[g[x][i].first]+g[x][i].second>=mine)
num++;
else
t.push_back(len[g[x][i].first]+g[x][i].second);
}
}
sort(t.begin(),t.end());
for(int i(0);i<t.size();++i)
vis[i]=0;
for(int i(0);i<t.size();++i)
{
if(vis[i])
continue;
int l=i+1,r=t.size()-1,ans=t.size();
while(l<=r)
{
int mid=(l+r)>>1;
if(t[i]+t[mid]>=mine)
r=mid-1,ans=mid;
else
l=mid+1;
}
while(ans<t.size()&&(t[ans]+t[i]<mine||vis[ans]))
++ans;
if(ans>=t.size())
break;
vis[ans]=vis[i]=1;
num++;
}
for(int i(t.size()-1);i>=0;--i)
if(!vis[i])
{
len[x]=t[i];
break;
}
return ;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i(1);i<n;++i)
{
int u,v,l;
scanf("%d%d%d",&u,&v,&l);
g[u].push_back(make_pair(v,l));
g[v].push_back(make_pair(u,l));
}
int l=0,r=1e9,ans=0;
while(l<=r)
{
memset(len,0,sizeof(len));
num=0;
int mid=(l+r)>>1;
dfs(1,1,mid);
if(num>=m)
{
l=mid+1;
ans=mid;
}
else
r=mid-1;
}
printf("%d",ans);
return 0;
}