#include<bits/stdc++.h>
#define pii pair<int,int>
using namespace std;
inline int read(){int s=0,w=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}while(c>='0'&&c<='9'){s=(s<<3)+(s<<1)+(c^48);c=getchar();}return s*w;}
inline void print(int x){if(x<0){putchar('-');x=-x;}if(x>=10)print(x/10);putchar(x%10+'0');}
int n,m,dep[300005],f[300005][20],mid,c[300005],a[300005],b[300005],sum[300005],cnt,ma;
int head[300005],to[600005],nxt[600005],v[600005],edgenum;
void addedge(int x,int y,int z)
{
to[++edgenum]=y;
v[edgenum]=z;
nxt[edgenum]=head[x];
head[x]=edgenum;
}
bool flag=false;
void dfs(int x,int fa)
{
dep[x]=dep[fa]+1;
f[x][0]=fa;
for(int i=head[x];i;i=nxt[i])
{
int u=to[i],w=v[i];
if(u!=fa)
{
sum[u]=sum[x]+w;
dfs(u,x);
}
}
}
int lca(int x,int y)
{
if(dep[x]<dep[y])swap(x,y);
while(dep[x]>dep[y])
{
int k=(int)log2(dep[x]-dep[y]);
x=f[x][k];
}
if(x==y)return x;
for(int i=(int)log2(dep[x]);i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];
return f[x][0];
}
void dfs2(int x,int fa)
{
for(int i=head[x];i;i=nxt[i])
{
int u=to[i],w=v[i];
if(u!=fa)
{
dfs2(u,x);
c[x]+=c[u];
if(c[u]==cnt)if(w>=ma)flag=true;
}
}
}
int main()
{
// freopen("P2680_9.in","r",stdin);
n=read(),m=read();
int l=0,r=0;
for(int x,y,z,i=2;i<=n;i++)x=read(),y=read(),z=read(),addedge(x,y,z),addedge(y,x,z),r+=z;
dfs(1,0);
for(int i=1;i<=17;i++)
for(int x=1;x<=n;x++)f[x][i]=f[f[x][i-1]][i-1];
for(int i=1;i<=m;i++)a[i]=read(),b[i]=read();
while(l<r)
{
// printf("%d %d\n",l,r);
mid=(l+r)/2;
for(int i=0;i<=n;i++)c[i]=0;
cnt=0;
ma=0;
flag=false;
for(int i=1;i<=m;i++)
{
int fa=lca(a[i],b[i]),len=sum[a[i]]+sum[b[i]]-sum[fa]*2;
if(len>mid)
{
cnt++;
ma=max(ma,len-mid);
c[fa]-=2;
c[a[i]]++;
c[b[i]]++;
}
}
if(cnt!=0)dfs2(1,0);
else flag=true;
if(flag)r=mid;
else l=mid+1;
}
print(l);
puts("");
return 0;
}
第九,第十三个点T了,哪里还能优化