#include<bits/stdc++.h>
using namespace std;
const int N=305;
vector<int>son[N];
int f[N][N],v[N],n,m;
void dp(int x){
f[x][0]=0;
for(int i=0;i<son[x].size();i++){
int y=son[x][i];
dp(y);
for(int t=m;t>=0;t--){
for(int j=0;j<=t;j++){
f[x][t]=max(f[x][t],f[x][t-j]+f[y][j]);
}
}
if(x!=0){
for(int t=m;t>0;t--){
f[x][t]=max(f[x][t],f[x][t-1]+v[x]);
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
int a;
scanf("%d%d",&a,v+i);
son[a].push_back(i);
}
dp(0);
printf("%d",f[0][m]);
return 0;
}