#include <bits/stdc++.h>
using namespace std;
const int maxn=300005;
int head[maxn],cnt=1,prel[maxn],ans[maxn],lst[maxn],dis[maxn],ed,st,maxlenson[maxn],que[maxn];
bool vis[maxn];
struct node{
int to,next,w;
}tree[maxn*2];
void add(int u,int v,int w){
tree[cnt].to=v;
tree[cnt].next=head[u];
tree[cnt].w=w;
head[u]=cnt++;
}
void dfs(int u,int f,int w){
dis[u]=dis[f]+w;
lst[u]=f;
prel[u]=w;
for(int i=head[u];i!=0;i=tree[i].next){
int v=tree[i].to;
if(v!=f){
dfs(v,u,tree[i].w);
}
}
}
int lenson(int u,int f,int w){
int len=0;
for(int i=head[u];i!=0;i=tree[i].next){
int v=tree[i].to;
if(v!=f&&!vis[v]){
len=max(len,lenson(v,u,tree[i].w));
}
}
return len+w;
}
int main(){
int n,s;
cin>>n>>s;
for(int i=1;i<n;i++){
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
add(v,u,w);
}
dfs(1,0,0);
for(int i=1;i<=n;i++){
if(dis[i]>dis[st]) st=i;
}
dfs(st,0,0);
for(int i=1;i<=n;i++){
if(dis[i]>dis[ed]) ed=i;
}
for(int i=ed;i!=st;i=lst[i]){
vis[i]=1;
}
for(int i=lst[ed];i!=st;i=lst[i]){
maxlenson[i]=lenson(i,0,0);
}
int head=1;
int tail=1;
que[tail++]=ed;
int l=ed,r=ed,ans=INT_MAX;
int ss=0,i=ed;
while(i!=0){
if(ss+prel[i]>s&&haed!=tail){
r=i;
int temp=max(max(dis[r],dis[ed]-dis[l]),maxlenson[que[head]]);
ans=min(ans,temp);
if(que[head]==l){
head++;
}
ss-=prel[l];
l=lst[l];
}else{
while(head!=tail&&maxlenson[que[tail]]<maxlenson[i]){
tail--;
}
que[tail++]=i;
ss+=prel[i];
i=lst[i];
}
}
cout<<ans;
return 0;
}
应该不用开LongLong吧