#include<bits/stdc++.h>
using namespace std;
const int N = 1e6;
int ch[N][2],rt[N],dis[N],p[N],c[N],deg[N],CC;
long long val[N];
int merge(int a,int b){
if(!a||!b)return a+b;
if(val[a]<val[b])swap(a,b);
ch[a][1]=merge(ch[a][1],b);
if(dis[ch[a][1]]>dis[ch[a][0]])
swap(ch[a][1],ch[a][0]);
dis[a]=dis[ch[a][1]]+1;
return a;
}
void pop(int x){
rt[x]=merge(ch[rt[x]][0],ch[rt[x]][1]);
}
int main(){
cin.tie(0)->sync_with_stdio(0);
int n,m;
long long ans=0;
cin>>n>>m;
for(int i=2;i<=n+m;i++)
cin>>p[i]>>c[i],deg[p[i]]++,ans+=c[i];
for(int i=n+m;i>1;i--){
long long l=0,r=0;
if(deg[i]) {
while(--deg[i])
pop(i);
r=val[rt[i]];
pop(i);
l=val[rt[i]];
pop(i);
}
val[++CC]=l+c[i],val[++CC]=r+c[i];
rt[i]=merge(rt[i],merge(CC,CC-1));
rt[p[i]]=merge(rt[p[i]],rt[i]);
}
while(deg[1]--)
pop(1);
while(rt[1])
ans-=val[rt[1]],pop(1);
cout<<ans<<'\n';
}