#include <bits/stdc++.h>
#define mp make_pair
#define f first
#define s second
typedef long long ll;
using namespace std;

const int N=1e5+10;
const int LogN=20;

ll k;
int cost[N][LogN], st[N][LogN];
vector<pair<int, int> > g[N];
int n;

void dfs (int v, int prev)
{
    for (auto xt: g[v])
    {
        if (xt.f==prev) continue;
        cost[xt.f][0]=xt.s;
        st[xt.f][0]=v;
        dfs (xt.f, v);
    }
}

void init ()
{
    for (int d=1;d<19;d++)
    {
        for (int i=1;i<=n;i++)
        {
            st[i][d]=st[st[i][d-1]][d-1];
            cost[i][d]=cost[i][d-1]+cost[st[i][d-1]][d-1];
        }
    }
}

int climb (int v, ll x)
{
    if (st[v][0]==0 || cost[v][0]>x) return 0;
    int d=0;
    while (st[v][d+1]!=0 && cost[v][d+1]<=x) d++;
    return climb(st[v][d], x-cost[v][d])+(1<<d);
}

ll solve (ll x)
{
    ll ret=0;
    for (int i=2;i<=n;i++) ret+=climb (i, x);
    return ret;
}

int main()
{
    scanf ("%d%d", &n, &k);
    for (int i=1;i<n;i++)
    {
        int a, b, w;
        scanf ("%d%d%d", &a, &b, &w);
        g[a].push_back(mp(b, w));
        g[b].push_back(mp(a, w));
    }

    dfs (1, 1);
    init();

    ll l=0, r=1e12, mid, sol=-1;
    while (l<=r)
    {
        mid=l+(r-l)/2;
        if (solve(mid)>=k)
        {
            sol=mid;
            r=mid-1;
        }
        else l=mid+1;
    }

    printf ("%lld", sol);

    return 0;
}