#include<bits/stdc++.h>
#define ll long long
#define maxn 50015
#define maxm maxn
#define mid (((l)+(r))/2)
using namespace std;
ll read(){
ll f=1,k=0;
char c=0;
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
k=k*10+c-'0';
c=getchar();
}
return k*f;
}
void out(ll x){
if(x<0){
x=-x;
putchar('-');
}
if(x>=10)out(x/10);
putchar(x%10+'0');
}
ll n,m,tot,Head[maxn],To[maxm<<1],Next[maxm<<1],C[maxm<<1],l,r,ans,val[maxn],cnt;
bool vst[maxn],bo[maxn];
void add(ll a,ll b,ll c){
tot++;
Next[tot]=Head[a];
Head[a]=tot;
To[tot]=b;
C[tot]=c;
}
ll chkmax(ll a,ll b){
return (a>b?a:b);
}
void dfs(ll s){
priority_queue< ll >q;
//ll kk=0;
for(ll i=Head[s];i;i=Next[i]){
ll k=To[i];
if(vst[k])continue;
vst[k]=1;
dfs(k);
if(C[i]+val[k]>=mid){
cnt++;
}
else {q.push(C[i]+val[k]);}
vst[k]=0;
}
vector< ll >vec;
//vec.push_back(22);
while(q.size()){
vec.push_back(q.top());
q.pop();
}
ll kl=vec.size(),i,j=kl-1;
for(i=0;i<j;i++){
for(j=kl-1;j>i;j--){
if(vec[i]+vec[j]>=mid){
bo[i]=bo[j]=1;
kl=j;
cnt++;
break;
}
}
}
ll ansp=0;
for(ll i=0;i<vec.size();i++){
if(bo[i]){
bo[i]=0;
continue;
}
ansp=vec[i];
break;
}
val[s]=ansp;
}
bool chkmid(){
cnt=0;
ll kt=rand()%n+1;
vst[kt]=1;
dfs(kt);
vst[kt]=0;
if(cnt>=m)return 1;
return 0;
}
int main(){
srand(time(0));
// freopen("f.in","r",stdin);
n=read();m=read();
for(ll i=1;i<n;i++){
ll a=read(),b=read(),c=read();
r+=c;
add(a,b,c);
add(b,a,c);
}
l=0;
while(l<=r){
//cout<<"For "<<mid<<endl;
if(chkmid()){
ans=mid;
l=mid+1;
}
else r=mid-1;
}
cout<<ans<<endl;
return 0;
}