#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>

#define pe pair<int, int>
#define fi first
#define se second
#define mp make_pair

using namespace std;

const int MAX_N = 100100;
const int INF = 20;

vector<pe> A[MAX_N];
bool viz[MAX_N];
vector<int> st;


int k, cnt;
int sVal;

void dfs(int nod, int sum = 0) {
    viz[nod] = true;
    st.push_back(sum);

    int poz = lower_bound(st.begin(), st.end(), sum - sVal) - st.begin();
    cnt += st.size() - poz - 1;

    for(auto it : A[nod]) {
        if(!viz[it.fi]) {
            dfs(it.fi, sum + it.se);
        }
    }

    st.pop_back();
}

bool check(int val) {
    memset(viz, 0, sizeof(viz));
    sVal = val;
    cnt = 0;
    dfs(1);
    
    //cout << val << ' ' << cnt << '\n';


    return cnt >= k;
}

int search(int st, int dr) {
    int ans = -1;
    while(st <= dr) {
        int mij = (st + dr) / 2;
        if(check(mij)) {
            ans = mij;
            dr = mij - 1;
        }
        else {
            st = mij + 1;
        }
    }
    return ans;
}

int main() {
    int n;
    cin >> n >> k;
    for(int i = 1; i < n; i++) {
        int a, b, c;
        cin >> a >> b >> c;
        A[a].push_back(mp(b, c));
        A[b].push_back(mp(a, c));
    }
    st.push_back(-2  * INF);

    cout << search(0, INF);

    return 0;
}