const int MAX=1010;
int dp[MAX][MAX];
struct E{
int to,next,w;
}e[MAX];
int head[MAX];
int cnt;
int s[MAX];
int n,m;
void add(int x,int y){
e[cnt].to=y;
e[cnt].next=head[x];
head[x]=cnt++;
}
void dfs(int u){
for(int i=head[u];~i;i=e[i].next){
int v=e[i].to;
dfs(v);
for(int j=m+1;j>=0;j--){
for(int k=0;k<j;k++){
dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k]);
}
}
}
}
int main(){
cin>>n>>m;
mms(head,-1);
for(int i=1;i<=n;i++){
int a,b,c;
cin>>a>>b;
add(a,i);
dp[i][1]=b;
}
dfs(0);
cout<<dp[0][m+1];
}