#include<bits/stdc++.h>
using namespace std;
const int N=305;
vector <int> v[N];
int n,m,a[N],squ[N],top=-1,siz[N],dp[N][N];
void dfs(int u)
{
squ[++top]=u;
siz[u]=1;
if(!v[u].size())
{
return ;
}
for(int i=0;i<v[u].size();i++)
{
dfs(v[u][i]);
siz[u]+=siz[v[u][i]];
}
}
int main()
{
cin>>n>>m;
m++;
for(int i=1;i<=n;i++)
{
int k;
cin>>k>>a[i];
v[k].push_back(i);
}
dfs(0);
for(int i=1;i<=n;i++)
{
for(int j=0;j<m;j++)
{
dp[i+1][j+1]=max(dp[i][j]+a[i],dp[i+1][j+1]);
dp[i+siz[i]-1][j]=max(dp[i][j],dp[i+siz[i]-1][j]);
}
}
cout<<dp[n][m];
}