#include<bits/stdc++.h>
#define ll long long
#define pll pair<ll,ll>
using namespace std;
int main(){
ll n,m,i,j,k,q;
cin>>n>>m;
vector<ll> p(n+m+1),c(n+m+1);
for(i=2 ; i<=n+m ; i++){
cin>>p[i]>>c[i];
}
vector<vector<ll>> g(n+m+1);
for(i=n+m ; i>=2 ; i--){
if(i>n) g[i]={-1,c[i],c[i],-c[i]};
if(i<=n){
g[i][1]+=c[i];
g[i][2]+=c[i];
g[i][3]-=c[i];
}
if(g[p[i]].size()==0){
g[p[i]]=g[i];
continue;
}
if(g[i][2]>g[p[i]][2]) swap(g[i],g[p[i]]);
ll l1=g[i][1],r1=g[i][2],k1=g[i][0],b1=g[i][3];
ll l2=g[p[i]][1],r2=g[p[i]][2],k2=g[p[i]][0],b2=g[p[i]][3];
ll k,l,r,b;
if(l2>r1){
r=l2;
if(k2==-1){
l=r1;
k=-1;
b=r2+b2+b1;
}
else{
l=l2;
k=k2+1;
b=r2+b2+b1;
}
g[p[i]]={k,l,r,b};
continue;
}
if(l2<=l1 and r1<=r2){
r=r1;
l=l1;
k=k1;
b=r2+b2+b1;
g[p[i]]={k,l,r,b};
continue;
}
r=r1;
l=l2;
k=k2;
b=b1+b2+r2;
g[p[i]]={k,l,r,b};
}
ll ans=g[1][2]+g[1][3];
cout<<ans;
return 0;
}