#include<bits/stdc++.h>
#define int long long
#define ii pair<int,int>
#define fi first
#define se second

using namespace std;
const int N = 2e5;
const int K = 2e6;

int n, k, sz[N+10], mn[K+10], timer[K+10], del[N+10], cnt, res=1e18;
vector<ii> adj[N+10];

void dfs(int u, int pu){
    sz[u]=1;
    for (ii p: adj[u]){
        int v = p.fi;
        if (v==pu || del[v]) continue;
        dfs(v,u);
        sz[u]+=sz[v];
    }
}

int find_centroid(int u,int pu, int szroot){
    for (ii p: adj[u]){
        int v = p.fi;
        if (v==pu || del[v]) continue;
        if (sz[v]>szroot/2) return find_centroid(v,u, szroot);
    }
    return u;
}


void up(int u, int pu, int w, int d){
    if (w>k) return;
    if (timer[w]!= cnt) mn[w] =d;
    else mn[w] = min(mn[w],d);
    timer[w] = cnt;

    for (ii p: adj[u]){
        int v = p.fi;
        int c = p.se;

        if (v==pu || del[v]) continue;
        up(v,u,w+c,d+1);
    }
}

void calc(int u, int pu, int w, int d){
    if (w>k) return;
    if (timer[k-w]==cnt) res = min(res, mn[k-w]+d);

    for (ii p: adj[u]){
        int v = p.fi;
        int c = p.se;

        if (v==pu || del[v]) continue;
        calc(v,u,w+c,d+1);
    }
}

void solve(int u){
    dfs(u,0);
    u = find_centroid(u,0,sz[u]);
    del[u]=1;

    cnt++;
    timer[0] = cnt;

    for (ii p: adj[u]){
        int v = p.fi;
        int w = p.se;

        if (del[v]) continue;
        calc(v,u,w,1);
        up(v,u,w,1);
    }

    for (ii p: adj[u]){
        int v = p.fi;
        int w = p.se;

        if (del[v]) continue;
        solve(v);
    }
}
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin>> n>>k;
    for (int i=1;i<n;i++){
        int u,v,w; cin>>u>>v>>w;
        adj[u].push_back({v,w});
        adj[v].push_back({u,w});
    }

    memset(mn,0x3f,sizeof(mn));
    mn[0]=0;
    solve(1);

    cout <<(res != 1e18? res:-1);
}
