#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');
return;
}
int n,m,dep[300005],f[300005][20],mid,c[300005],a[300005],b[300005],sum[300005],cnt,ma;
vector<pii>vec[300005];
bool flag=false;
void dfs(int x,int fa)
{
dep[x]=dep[fa]+1;
f[x][0]=fa;
for(int i=1;(1<<i)<=dep[x];i++)f[x][i]=f[f[x][i-1]][i-1];
for(pii i:vec[x])
{
int u=i.first,v=i.second;
if(u!=fa)
{
sum[u]=sum[x]+v;
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=17;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(pii i:vec[x])
{
int u=i.first,v=i.second;
if(u!=fa)
{
dfs2(u,x);
c[x]+=c[u];
if(c[u]==cnt)if(v>=ma)flag=true;
}
}
}
int main()
{
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(),vec[x].push_back({y,z}),vec[y].push_back({x,z}),r+=z;
dfs(1,0);
for(int i=1;i<=m;i++)a[i]=read(),b[i]=read();
while(l<r)
{
mid=(l+r)/2;
for(int i=1;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]);
int 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;
}