#include<bits/stdc++.h>
using namespace std;
typedef __int128_t int128;
typedef __int128_t ll;
int128 read(){
int128 x=0; bool f = 0; char c = getchar();
while (c < '0'|| c > '9') { if (c == '-') f = 1; c = getchar(); }
while (c >= '0' && c <= '9') { x = (x << 1) + (x << 3) + (c ^ 48); c = getchar(); }
return f ? -x : x;
}
inline void write(int128 x){
if(x < 0) putchar('-'), x = -x;
if(x > 9) write(x / 10);
putchar(x % 10 + '0');
}
ll n,m,x,w,y,z,dep[500010], anc[500010][20],dis[500010],diff[500010];
struct node{
ll v,w;
};
vector<node> v[300010];
struct D{
ll u,v,x,lca;
}a[500010];
void dfs1(ll x, ll fa,ll w) {
dep[x] = dep[fa] + 1;
anc[x][0] = fa;
dis[x] = dis[fa] + w;
for (int i = 1; i <= 17; i++) anc[x][i] = anc[anc[x][i - 1]][i - 1];
for (int i = 0; i < v[x].size(); i++) {
if (v[x][i].v != fa) dfs1(v[x][i].v, x,v[x][i].w);
}
}
ll lca(ll x, ll y) {
if (dep[x] < dep[y])swap(x, y);
for (int i = 16; i >= 0; i--)
if (dep[anc[x][i]] >= dep[y]) x = anc[x][i];
if (x == y) return y;
for (int i = 16; i >= 0; i--)
if (anc[x][i] != anc[y][i]) {
x = anc[x][i];
y = anc[y][i];
}
return anc[x][0];
}
bool cmp(D x,D y){
return x.x>y.x;
}
void dfs(ll u, ll father) {
for (int i = 0; i < v[u].size(); i++) {
if (v[u][i].v != father) {
dfs(v[u][i].v, u);
diff[u] += diff[v[u][i].v];
}
}
}
bool check(ll mid){
memset(diff, 0, sizeof(diff));
ll b = 0;
for (int i = 1; i <= m; i++) {
if (a[i].x <= mid) break;
diff[a[i].u]++;
diff[a[i].v]++;
diff[a[i].lca] -= 2;
b++;
}dfs(1,0);
ll maxx=0;
for(int i=1;i<=n;i++)
if(diff[i]==b)
for(int k=0;k<v[i].size();k++)
if(v[i][k].v==anc[i][0]){maxx=max(maxx,v[i][k].w);break;}
return a[1].x-maxx<=mid;
}
int main() {
n=read(),m=read();
for(int i=1;i<n;i++){
x=read(),y=read(),z=read();
w=max(w,z);
v[x].push_back({y,z});
v[y].push_back({x,z});
}dfs1(1,0,0);
for(int i=1;i<=m;i++){
x=read(),y=read();
ll z=lca(x,y);
a[i].u = x;
a[i].v = y;
a[i].lca = z;
a[i].x = dis[x] + dis[y] - 2 * dis[z];
}sort(a+1,a+m+1,cmp);
ll l=a[1].x-w,r=a[1].x,ans=0;
while(l<=r){
ll mid=(l+r)/2;
if(check(mid)==true){
r=mid-1;
ans=mid;
}else l=mid+1;
}write(ans);
return 0;
}