#include <bits/stdc++.h>
using namespace std;
int n, m;
struct xk {
int b, f;
} f[305];
int cnt[305];
int dp[305][305];
int k = 1;
vector<int> l;
void dfs(int gjd) {
bool vl=0;
for (int i = 1; i <= n; i++) {
if (f[i].b == gjd) {
vl=1;
int m=k;
dfs(i);
if(m+1==k){
continue;
}
for (int j = m; j >= 1; j--) {
dp[k][j] = max(dp[k - 1][j], dp[k - 1][j - 1] + f[i].f);
}
k++;
}
}
if(vl==1){
dp[k][1] = f[gjd].f;
for (int i = 2; i <= m; i++) {
dp[k][i] = dp[k - 1][i - 1] + f[gjd].f;
}
l.push_back(gjd);
k++;
}else{
for (int j = m; j >= 1; j--) {
dp[k][j] = max(dp[k - 1][j], dp[k - 1][j - 1] + f[gjd].f);
}
k++;
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> f[i].b >> f[i].f;
if (f[i].b!=0) {
cnt[i] = 1;
}
}
for (int i = 1; i <= n; i++) {
if (cnt[i] == 0) {
dfs(i);
}
}
cout << dp[n][m];
return 0;
}