/*
*/

//#pragma comment(linker, "/STACK:16777216")
#define _CRT_SECURE_NO_WARNINGS

#include <fstream>
#include <iostream>
#include <string>
#include <complex>
#include <math.h>
#include <set>
#include <vector>
#include <map>
#include <queue>
#include <stdio.h>
#include <stack>
#include <algorithm>
#include <list>
#include <ctime>
#include <memory.h>
#include <assert.h>

#define y0 sdkfaslhagaklsldk
#define y1 aasdfasdfasdf
#define yn askfhwqriuperikldjk
#define j1 assdgsdgasghsf
#define tm sdfjahlfasfh
#define lr asgasgash
#define norm asdfasdgasdgsd

#define eps 1e-9
#define M_PI 3.141592653589793
#define bs 666013
#define bsize 256

using namespace std;

const int INF = 1e9;
const int N = 100031;

int n, k;

vector<pair<int, int> >g[N];

vector<int> G[N];

int dep[N];
int dep2[N];
int used[N];
int p_pos[N];

void dfs(int v)
{
	used[v] = 1;
	for (int i = 0; i < g[v].size(); i++)
	{
		int to = g[v][i].second;
		int cost = g[v][i].first;
		if (used[to])
			continue;
		dep[to] = dep[v] + cost;
		dep2[to] = dep2[v] + 1;
		G[v].push_back(to);
		p_pos[to] = G[v].size() - 1;
		dfs(to);
	}
}

long long res;
int ptr[N];
vector<int> S;
int BOUND;

void DFS(int v,int p)
{
	if (v == 1)
		ptr[v] = 0;
	else if (p_pos[v] == 0)
		ptr[v] = ptr[p];
	else
		ptr[v] = ptr[G[p][p_pos[v] - 1]];

	while (ptr[v] + 1 < S.size() && dep[S[ptr[v]]] < dep[v] - BOUND)
		++ptr[v];
	//cout << v << "$" << S.size() << " " << ptr[v] << " " << dep[S[ptr[v]]] << " " << dep[v] << " " << BOUND << endl;
	res += S.size() - ptr[v] - 1;

	for (int i = 0; i < G[v].size(); i++)
	{
		int to = G[v][i];
		S.push_back(to);
		DFS(to, v);
		S.pop_back();
	}
}

long long solve(int bound)
{
	res = 0;
	for (int i = 1; i <= n; i++)
	{
		ptr[i] = 0;
	}
	BOUND = bound;
	S.clear();
	S.push_back(1);
	DFS(1,1);
	//cout << bound<<" "<<res << endl;

	return res;
}

int main(){
	//freopen("fabro.in","r",stdin);
	//freopen("fabro.out","w",stdout);
	//freopen("F:/in.txt", "r", stdin);
	//freopen("F:/output.txt", "w", stdout);
	ios_base::sync_with_stdio(0);
	//cin.tie(0);

	cin >> n >> k;
	for (int i = 1; i < n; i++)
	{
		int a, b, c;
		cin >> a >> b >> c;
		g[a].push_back(make_pair(c,b));
		g[b].push_back(make_pair(c,a));
	}

	for (int i = 1; i <= n; i++)
		sort(g[i].begin(), g[i].end());

	dfs(1);

	/*for (int i = 1; i <= n; i++)
	{
		cout << i << "%" << dep[i] << endl;
	}*/
	int l, r;
	l = 0;
	r = 1e9 + 1e6;
	while (l < r)
	{
		int mid = l + r;
		mid /= 2;
		if (solve(mid) >= k)
			r = mid;
		else
			l = mid + 1;
	}

	if (l>1e9 + 1e5)
		cout << -1 << endl;
	else
		cout << l << endl;

	cin.get(); cin.get();
	return 0;
}