#include <bits/stdc++.h>
using namespace std;
const int inf = int(1e9);
const int N = 400;
int dp[N][N];
vector<pair<int, int>> g[N];
void dfs(int u) {
if (g[u].empty()) {
for (int w = 1; w < N; w++) {
dp[u][w] = inf;
}
}
for (auto [v, w] : g[u]) {
dfs(v);
for (int x = 0; x < N; x++) {
int best = inf;
for (int y = 0; y <= x; y++) {
best = min(best, dp[v][y] + abs((x - y) - w));
}
if (dp[u][x] < inf) {
dp[u][x] += best;
}
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
n += m;
for (int i = 2; i <= n; i++) {
int p, c;
cin >> p >> c;
g[p].emplace_back(i, c);
}
dfs(1);
int ans = inf;
for (int w = 0; w < N; w++) {
ans = min(ans, dp[1][w]);
}
cout << ans << '\n';
return 0;
}