#include<bits/stdc++.h>
using namespace std;
int n,s,u,v,ans;
int b[302][302],tp[302],lll;
bool use[302],f;
map <int,int> m;
int t[302],sum,jk,maa=0;
void dfs(int p,int l){
if (l>=maa){
jk=p;
maa=l;
}
for (int i=1;i<=n;i++){
if ((!use[i])&&b[p][i]){
use[i]=1;
dfs(i,l+b[p][i]);
use[i]=0;
}
}
return;
}
void find(int p,int c){
if (p==v){
f=1;
t[c]=v;
sum=c;
return;
}
for (int i=1;i<=n;i++){
if ((!use[i])&&b[p][i]){
use[i]=1;
find(i,c+1);
if (f){
t[c]=p;
return;
}
}
}
return;
}
int dfs1(int q){
if (m[q]==1){
return 1;
}
for (int i=1;i<=n;i++){
if ((!use[i])&&b[q][i]){
use[i]=1;
lll+=b[q][i];
if (dfs1(i)==0){
lll-=b[q][i];
}
else{
return 1;
}
}
}
return 0;
}
signed main(){
scanf("%d%d",&n,&s);
for (int i=1;i<n;i++){
int x,y,l;
scanf("%d%d%d",&x,&y,&l);
b[x][y]=b[y][x]=l;
tp[x]++;
tp[y]++;
}
for (int i=1;i<=n;i++) b[i][i]=0;
use[1]=1;
dfs(1,0);
memset(use,0,sizeof(use));
u=jk;
use[u]=1;
dfs(u,0);
memset(use,0,sizeof(use));
v=jk;
use[u]=1;
find(u,1);
int o=1,s1,s2;
int mid=maa/2,cd=0;
while (cd<mid) cd+=b[t[o]][t[++o]];
s1=cd,s2=maa-cd;
int r=o;
m[o]=1;
while (s>0&&r>1&&o<n){
if (s<b[t[r]][t[r-1]]&&s<b[t[o]][t[o+1]]){
break;
}
else{
if (s1>s2&&s>=b[t[r]][t[r-1]]){
s-=b[t[r]][t[r-1]];
s1-=b[t[r]][t[r-1]];
r--;
m[r]=1;
}
else{
if (s1>s2){
s-=b[t[o]][t[o+1]];
s2-=b[t[o]][t[o+1]];
o++;
m[o]=1;
}
else{
if (s>=b[t[r]][t[r-1]]){
s-=b[t[r]][t[r-1]];
s1-=b[t[r]][t[r-1]];
r--;
m[r]=1;
}
else{
s2-=b[t[o]][t[o+1]];
s-=b[t[o]][t[o+1]];
o++;
m[o]=1;
}
}
}
}
}
for (int i=1;i<=n;i++){
if (tp[i]==1){
memset(use,0,sizeof(use));
lll=0;
use[i]=1;
if (dfs1(i)){
ans=max(ans,lll);
}
}
}
cout<<ans<<endl;
return 0;
}