/*
一个显然的结论是最后的路径一定在直径上,可以先两遍bfs求出直径。
然后二分答案,通过答案来对之间进行删减。
*/
#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
#define N 300010
using namespace std;
int n,s,top,ans,D;
int dis[N],st[N],head[N],fa[N],mark[N];
struct node{int v,w,pre;}e[N*2];
queue<int> q;
void add(int i,int u,int v,int w){
e[i].v=v;
e[i].w=w;
e[i].pre=head[u];
head[u]=i;
}
void bfs(int S){
memset(dis,-1,sizeof(dis));
q.push(S);dis[S]=0;
while(!q.empty()){
int u=q.front();q.pop();
for(int i=head[u];i;i=e[i].pre)
if(dis[e[i].v]==-1){
fa[e[i].v]=u;
if(mark[e[i].v]) dis[e[i].v]=dis[u];
else dis[e[i].v]=dis[u]+e[i].w;
q.push(e[i].v);
}
}
}
bool judge(int mid){
int l=1,r=top;
while(st[1]-st[l+1]<=mid&&l<=top) l++;
while(st[r-1]<=mid&&r>=1) r--;
return st[l]-st[r]<=s;
}
int main(){
scanf("%d%d",&n,&s);
for(int i=1;i<n;i++){
int u,v,w;scanf("%d%d%d",&u,&v,&w);
add(i*2-1,u,v,w);add(i*2,v,u,w);
}
int rt=0,x=0;
bfs(1);for(int i=1;i<=n;i++)if(dis[i]>dis[rt])rt=i;
bfs(rt);for(int i=1;i<=n;i++)if(dis[i]>dis[x])x=i;
D=dis[x];
st[++top]=dis[x];mark[x]=1;
while(x!=rt){
st[++top]=dis[fa[x]];x=fa[x];
mark[x]=1;
}
bfs(x);
int l=0,r=D;
for(int i=1;i<=n;i++)l=max(l,dis[i]);
if(s<D)
while(l<=r){
int mid=l+r>>1;
if(judge(mid)) r=mid-1;
else l=mid+1;
}
printf("%d\n",l);
return 0;
}