#include "bits/stc++.h"
using namespace std;
const int mxn = 200001;
vector<pair<int, int>> adj[mxn];
map<int, int> m[mxn];
dis[mxn];
dep[mxn];
int ans = -1;
int K;
void check(int v, int di, int de){
int tar = K - di + (2 * dist[v]);
if(m[v][target] != 0){
ans = min(ans, m[v][target] + de - (2 * dep[v]));
}
}
void add(int v, int di, int de){
if(m[v][di] == 0){
m[v][di] = de;
}
else{
if(de < m[v][di]){
m[v][di] = de;
}
}
}
void dfs(int v, int p){
dep[v] = dep[p] + 1;
int ind = -1;
for(auto [i, j] : adj[v]){
if(i != p){
dist[i] += j;
dfs(i, v);
if(ind != -1 || m[i].size() > m[ind].size()){
ind = i;
}
}
}
if(m != -1){
swap(m[ind], m[v]);
}
add(v, dis[v], dep[v]);
for(auto [i, j] : adj[v]){
if(i != p && i != m){
for(auto [a, b] : m[i]){
check(v, a, b);
}
}
}
for(auto [i, j] : adj[v]){
if(i != p && i != m){
for(auto [a, b] : m[i]){
add(v, a, b);
}
}
}
}
void
int best_path(int n, int k, int h[][2], int l[])
{
K = k;
for(int i = 1; i < n; i++){
adj[h[i][0]].push_back({h[i][1], l[i]});
adj[h[i][1]].push_back({h[i][0], l[i]});
}
dfs(1, 0);
cout<<ans;
}