#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vll;
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
#define ordered_multiset tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update>
#define pb push_back
#define ff first
#define ss second

const int N = 2e5 + 1;
vector<pll> graf[N], odl[N];
vi zb;
ll dyst[N];
int podd[N], odw[N];


struct oba{
    ll v1, k1, v2, k2;
};

vector<oba> pref[N], suf[N];

void poddrzewa(int v, int ojc){
    podd[v] = 1;
    for(pll x : graf[v]){
        int u = x.ff;
        if(odw[u] || u == ojc) continue;
        poddrzewa(u, v);
        podd[v] += podd[u];
    }
}

int znajdz(int v, int ojc, int r){
    for(pll x : graf[v]){
        int u = x.ff;
        if(odw[u] || u == ojc) continue;
        if(podd[u] > r / 2) return znajdz(u, v, r);
    }
    if(r - podd[v] <= r / 2) return v;
}

void dfs_policz(int v, int ojc){
    zb.pb(v);
    for(pll x : graf[v]){
        int u = x.ff;
        if(u == ojc || odw[u]) continue;
        dyst[u] = dyst[v] + x.ss;
        dfs_policz(u, v);
    }
}

void decompose(int v){
    poddrzewa(v, 0);
    int c = znajdz(v, 0, podd[v]);
    odw[c] = 1; dyst[c] = 0;
    odl[c].pb({0, c});
    for(pll x : graf[c]){
        int u = x.ff; ll w = x.ss;
        if(odw[u]) continue;
        dyst[u] = w;
        dfs_policz(u, 0);

        for(int y : zb){
            odl[c].pb({dyst[y], u});
        }
    }

    sort(odl[c].begin(), odl[c].end());
    pref[c].resize(podd[v] + 1);
    suf[c].resize(podd[v] + 1);
    pref[c][0] = {-1, -2, -1, -1};
    for(int i = 1; i <= odl[c].size(); i++){
        ll d = odl[c][i].ff, k = odl[c][i].ss;
        if(k == pref[c][i - 1].k1){
            pref[c][i].v2 = pref[c][i - 1].v2; pref[c][i].k2 = pref[c][i - 1].k2;
        }else{
            pref[c][i].v2 = pref[c][i - 1].v1; pref[c][i].k2 = pref[c][i - 1].v1;
        }
        pref[c][i].v1 = d; pref[c][i].k1 = k;
    }



    for(pii x : graf[c]){
        if(odw[x.ff]) continue;
        decompose(x.ff);
    }
}


ll mniej(ll x, int n){
    ll best = -1;
    for(int c = 1; c <= n; c++){
        int m = odl[c].size();
        int j = m;
        for(int i = 1; i <= m; i++){
            while(j >= 1 && odl[c][i - 1].ff + odl[c][j - 1].ff > x) j--;
            if(j == 0) break;

            ll kand = odl[c][i - 1].ff, k = odl[c][i - 1].ss;
            if(k == pref[c][j].k1){
                kand += pref[c][j].v2;
            }else{
                kand += pref[c][j].v1;
            }

            best = max(kand, best);

        }
    }
    return best;
}

ll wiecej(ll x, int n){


}



int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n, q;
    cin >> n >> q;

    for(int i = 1; i < n; i++){
        int a, b, c; cin >> a >> b >> c;
        graf[a].pb({b, c}); graf[b].pb({a, c});
    }

    decompose(1);

    vector<pll> przedzialy;
    ll pocz, kon;


    while(q--){

    }



    return 0;
}

