#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,cnt,ans,lca[300005],w[300005],h[300005],sum[300005],len[300005],M[300005],Log[300005],s[300005],t[300005],U[300005],f[300005][20];
struct edge{
int v,nxt,w;
}e[600005];
void adde(int u,int v,int w){
e[++cnt].nxt=h[u];
h[u]=cnt;
e[cnt].v=v;
e[cnt].w=w;
}
void dfs(int x,int fa){
len[x]=len[fa]+1;
f[x][0]=fa;
for(int i=1;i<=Log[len[x]];i++)f[x][i]=f[f[x][i-1]][i-1];
for(int i=h[x];i;i=e[i].nxt){
if(e[i].v==fa)continue;
M[e[i].v]=M[x]+e[i].w;
U[e[i].v]=((i&1)?i/2+1:i/2);
dfs(e[i].v,x);
}
}
int LCA(int u,int v){
if(len[u]<len[v])swap(u,v);
while(len[u]!=len[v])u=f[u][Log[len[u]-len[v]]];
if(u==v)return u;
for(int i=Log[len[u]];i>=0;i--){
if(f[u][i]!=f[v][i]){
u=f[u][i];
v=f[v][i];
}
}
return f[u][0];
}
void dfs1(int x,int fa){
for(int i=h[x];i;i=e[i].nxt){
if(e[i].v==fa)continue;
dfs1(e[i].v,x);
sum[U[x]]+=sum[U[e[i].v]];
}
}
bool ch(int x){
memset(sum,0,sizeof(sum));
int maxn=0,tot=0;
for(int i=1;i<=m;i++){
if(w[i]>x){
maxn=max(maxn,w[i]);
sum[U[s[i]]]++;
sum[U[t[i]]]++;
sum[U[lca[i]]]-=2;
tot++;
}
}
if(tot==0)return 1;
dfs1(1,0);
for(int i=2;i<=n;i++){
if(sum[U[i]]==tot){
if(maxn-e[U[i]*2].w<=x)return 1;
}
}
return 0;
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=1,u,v,w;i<n;i++){
scanf("%lld%lld%lld",&u,&v,&w);
adde(u,v,w);
adde(v,u,w);
}
dfs(1,0);
for(int i=1,u,v;i<=m;i++){
scanf("%lld%lld",&u,&v);
s[i]=u,t[i]=v;
lca[i]=LCA(u,v);
w[i]=M[u]+M[v]-2*M[lca[i]];
}
int l=0,r=300000005,mid;
while(l<r){
mid=l+r>>1;
if(ch(mid))r=mid-1,ans=mid;
else l=mid+1;
}
printf("%lld",ans);
return 0;
}