#include<bits/stdc++.h>
using namespace std;
const int MAXN=3e5+5;
vector< pair<int,int> > ds[MAXN];
pair<long long,long long> range[MAXN];
long long ans=0;
void dfs(int i,int pre)
{
vector<int> vi;
int sum=0,f=0;
for(auto v:ds[i])
{
dfs(v.first,i);
vi.push_back(range[v.first].first+v.second);
vi.push_back(range[v.first].second+v.second);
}
if(vi.empty()) return ;
sort(vi.begin(),vi.end());
range[i]={vi[vi.size()/2-1],vi[vi.size()/2]};
for(auto v:ds[i]) ans+=min(abs(range[v.first].first+v.second-range[i].first),abs(range[v.first].second+v.second-range[i].first));
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m;
cin>>n>>m;
for(int i=2;i<=n+m;i++)
{
int l,r;
cin>>l>>r;
ds[l].push_back({i,r});
}
dfs(1,1);
cout<<ans;
}