#include<bits/stdc++.h>
#define PII pair<int, int>
#define fi first
#define se second
using namespace std;
const int N = 50005;
int n, m, ans, gx[N], res;//gx表示每个可以对祖先进行的贡献
vector<vector<PII> > g(N);
multiset<int> s;
void dfs(int x, int fa, int k)
{
gx[x] = 0;
for(int i = 0; i < g[x].size(); i ++)
{
int y = g[x][i].fi;
if(y == fa)continue;
dfs(y, x, k);
}
// cout << x << endl;
s.clear();
for(int i = 0; i < g[x].size(); i ++)
{
int y = g[x][i].fi, z = g[x][i].se;
if(y == fa)continue;
s.insert(gx[y] + z);
}
// cout << 1 << endl;
multiset<int>::iterator it = s.end();
// cout << *it<< endl;
while(!s.empty())
{
it --;
if(*it < k)break;
s.erase(it);
it = s.end();
res ++;
}
// cout << 1 << endl;
//每次基于第一个去往后找
while(!s.empty())
{
if(s.size() == 1)
{
gx[x] = max(*s.begin(), gx[x]);
return ;
// s.erase(s.begin());
// return ;
}
it = lower_bound(s.begin(), s.end(), k - *s.begin());
if(it == s.begin() && s.count(*it) == 1)it ++;
if(it == s.end())
{
gx[x] = max(gx[x], *s.begin());
s.erase(s.begin());//找不到配对的了
}
else
{
s.erase(s.begin());
s.erase(it);
res ++;
}
}
}
bool check(int k)
{
res = 0;
dfs(1, 0, k);
return res >= m;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(int i = 1; i < n; i ++)
{
int x, y, z;
cin >> x >> y >> z;
g[x].push_back({y, z});
g[y].push_back({x, z});
}
// cout << check(15) << endl;
// return 0;
int l = 1, r = 500000005, mid;
while(l <= r)//二分最小值
{
// memset(gx, 0, sizeof gx);
mid = (l + r) / 2;
// cout << mid << endl;
if(check(mid))
{
ans = mid;
l = mid + 1;
}
else r = mid - 1;
}
cout << ans;
return 0;
}