#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
const int N = 210;
int n,m;
vector<int> g[N];
int dp[N][N],w[N];
void dfs(int u)
{
dp[u][1]=w[u];
for(auto &j:g[u])
{
dfs(j);
for(int i=m+1;i>=1;i--)
for(int k=1;k<=i;k++)
dp[u][i]=max(dp[u][i],dp[u][k]+dp[j][i-k]);
}
}
int main()
{
while(cin>>n>>m,n+m)
{
memset(dp,0,sizeof dp);
for(int i=0;i<=n;i++) g[i].clear();
for(int i=1;i<=n;i++)
{
int a;cin>>a>>w[i];
g[a].push_back(i);
}
dfs(0);
cout<<dp[0][m+1]<<endl;
}
return 0;
}