program core;
var
a,d:array[1..301,1..301]of longint;
lis:array[1..301]of longint;
hash:array[1..301]of boolean;
t,n,s,dfs,l,r,ecc:longint;
function min(a,b:longint):longint;
begin
if a>b then exit(b)
else exit(a);
end;
procedure init;
var
i,x,y,j,z,p:longint;
begin
fillchar(a,sizeof(a),0);
fillchar(hash,sizeof(hash),true);
readln(n,s);
for i:=1 to n do
for j:=1 to n do
d[i,j]:=99999;
for i:=1 to n-1 do
begin
readln(x,y,z);
a[x,y]:=z; d[x,y]:=z;
a[y,x]:=z; d[y,x]:=z;
end;
ecc:=maxlongint; t:=1;
for i:=1 to n do
d[i,i]:=0;
end;
procedure floyd;
var
i,j,k,max:longint;
begin
max:=0;
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do
if d[i,k]+d[k,j]<d[i,j] then d[i,j]:=d[i,k]+d[k,j];
for i:=1 to n do
for j:=1 to n do
if (d[i,j]>max)and(d[i,j]<>99999) then begin max:=d[i,j]; l:=i; r:=j; end;
end;
procedure dfss(k:longint);
var
i,j:longint;
begin
if k=r then begin inc(t); lis[t]:=r; exit; end
else begin
for i:=1 to n do
begin
if lis[t]=r then exit;
if (a[k,i]<>0)and(hash[i]) then begin
inc(t); lis[t]:=i; hash[i]:=false; dfss(i);
if lis[t]=r then exit;
dec(t); hash[i]:=true;
end;
end;
end;
end;
procedure search;
var
i,j,k,mm:longint;
begin
for i:=1 to t do
begin
for j:=i to t do
begin
mm:=-maxlongint;
if d[lis[i],lis[j]]<=s then begin
for k:=1 to n do
if min(d[lis[i],k],d[lis[j],k])>mm then mm:=min(d[lis[i],k],d[lis[j],k]);
if mm<ecc then ecc:=mm;
end;
end;
end;
end;
begin
init;
floyd;
lis[1]:=l; hash[l]:=false;
dfss(l);
dec(t);
search;
writeln(ecc);
end.