#include <bits/stdc++.h>
using namespace std;
int Qread()
{
int x=0;char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9')
{
x=(x<<3)+(x<<1)+(ch^48);
ch=getchar();
}
return x;
}
struct ys{
int l,r,len,zx;
}p[300010];
bool cmp(ys a,ys b)
{
return a.len>b.len;
}
int n,m,i,j,a,b,w,L,R,q;
int l[600010][3],t[300010],dpth[300010],maxdpth;
int f[300010][2],maxn[300010][20],fa[300010][20],sum[300010][20];
int Log[300010];
bool vis[300010];
void dfs(int a)
{
maxdpth=max(maxdpth,dpth[a]);
vis[a]=true;
for(int k=t[a];k!=0;k=l[k][0])
{
if(vis[l[k][1]]) continue;
f[l[k][1]][0]=a;
f[l[k][1]][1]=l[k][2];
dpth[l[k][1]]=dpth[a]+1;
dfs(l[k][1]);
}
return;
}
void swap(int &u,int &v)
{
int temp=u;
u=v;
v=temp;
return;
}
int LCA(int u,int v,int a)
{
int cnt=0;
if(dpth[u]<dpth[v]) swap(u,v);
while(dpth[u]>dpth[v])
{
cnt+=sum[u][Log[dpth[u]-dpth[v]]];
u=fa[u][Log[dpth[u]-dpth[v]]];
}
for(int c=Log[maxdpth];c>=0&&u!=v;c--)
{
if(fa[u][c]!=fa[v][c])
{
cnt+=sum[u][c];
cnt+=sum[v][c];
u=fa[u][c];
v=fa[v][c];
}
}
if(u!=v)
{
cnt+=sum[u][0];
cnt+=sum[v][0];
}
if(a!=0)
p[a].len=cnt;
if(u!=v) return f[u][0];
else return u;
}
int find(int u,int v)
{
int ret=0;
if(dpth[u]<dpth[v]) swap(u,v);
while(dpth[u]>dpth[v])
{
ret=max(ret,maxn[u][Log[dpth[u]-dpth[v]]]);
u=fa[u][Log[dpth[u]-dpth[v]]];
}
for(int c=Log[maxdpth];c>=0&&u!=v;c--)
{
if(fa[u][c]!=fa[v][c])
{
ret=max(ret,max(maxn[u][c],maxn[v][c]));
u=fa[u][c];
v=fa[v][c];
}
}
if(u!=v)
ret=max(ret,max(maxn[u][0],maxn[v][0]));
return ret;
}
void uni(int l1,int r1,int l2,int r2)
{
int a1=LCA(l1,l2,0),a2=LCA(l1,r2,0),a3=LCA(r1,l2,0),a4=LCA(r1,r2,0);
if(a1==a2) L=a3,R=a4;
if(a1==a3) L=a2,R=a4;
if(a1==a4) L=a2,R=a3;
if(a2==a3) L=a1,R=a4;
if(a2==a4) L=a1,R=a3;
if(a3==a4) L=a1,R=a2;
}
int main()
{
n=Qread();m=Qread();
Log[0]=-1;
for(i=1;i<=n;i++)
Log[i]=Log[i>>1]+1;
for(i=1;i<n;i++)
{
a=Qread();b=Qread();w=Qread();
l[i<<1][0]=t[a];
l[i<<1][1]=b;
l[i<<1][2]=w;
t[a]=i<<1;
l[(i<<1)-1][0]=t[b];
l[(i<<1)-1][1]=a;
l[(i<<1)-1][2]=w;
t[b]=(i<<1)-1;
}
dpth[1]=1;
dfs(1);
for(i=0;i<=Log[maxdpth];i++)
for(j=1;j<=n;j++)
{
if(i==0) fa[j][0]=f[j][0],sum[j][0]=maxn[j][0]=f[j][1];
else fa[j][i]=fa[fa[j][i-1]][i-1],maxn[j][i]=max(maxn[j][i-1],maxn[fa[j][i-1]][i-1]),sum[j][i]=sum[j][i-1]+sum[fa[j][i-1]][i-1];
}
for(i=1;i<=m;i++)
{
p[i].l=Qread();
p[i].r=Qread();
p[i].zx=LCA(p[i].l,p[i].r,i);
}
sort(p+1,p+m+1,cmp);
q=0;
for(i=1;i<=m;i++)
{
if(i==1) L=p[i].l,R=p[i].r;
else
{
uni(L,R,p[i].l,p[i].r);
if(L==R)
{
cout<<p[i].len;
return 0;
}
}
q=find(L,R);
if(p[1].len-q>=p[i+1].len)
{
cout<<p[1].len-q;
break;
}
}
if(i==m+1)
cout<<0;
return 0;
}