#include<bits/stdc++.h>
#define MAXN 50005
using namespace std;
struct node{
int to;
int next;
int dis;
}e[MAXN<<1];
int head[MAXN],tot;
void add(int u,int v,int w)
{
e[++tot].to=v;
e[tot].dis=w;
e[tot].next=head[u];
head[u]=tot;
}
bool vis[MAXN];
int total;
int n,m;
struct Sort{
int val;
bool used;
Sort(int a){val=a,used=0;}
};
bool cmp(Sort a,Sort b){return a.val<b.val;}
bool cmpSort(Sort a,Sort b){return a.val<b.val;}
int dfs(int u,int minn)
{
vector<Sort>q;
vis[u]=1;
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].to;
int dis=e[i].dis;
if(vis[v])continue;
int E=dfs(v,minn)+e[i].dis;
if(E>=minn){total--;continue;}
if(E!=0)
q.push_back(Sort(E));
}
sort(q.begin(),q.end(),cmp);
for(int i=0;i<q.size();++i)
{
auto p=lower_bound(q.begin()+i+1,q.end(),minn-q[i].val,cmpSort);
if(p==q.end())continue;
q[i].used=1;
total--;
q.erase(p);
}
for(int i=q.size()-1;i>=0;++i)
{if(q[i].used==0){return q[i].val;}}
return 0;
}
void divide()
{
int l=0,r=100000000;
int ans,mid;
while(l<=r)
{
mid=(l+r)>>1;
memset(vis,0,sizeof(vis));
total=m;
dfs(1,mid);
if(total<=0)ans=mid,l=mid+1;
else r=mid-1;
}
printf("%d\n",ans);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<n;++i){
int a,b,l;
scanf("%d%d%d",&a,&b,&l);
add(a,b,l),add(b,a,l);
}
divide();
return 0;
}