//created int таджикистан
#include <iostream>
#include <cmath>
#include <deque>
#include <set>
#include <stack>
#include <queue>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <algorithm>
#include <random>
#include <fstream>
#include <bitset>
#include <ranges>
#include <chrono>
#include <iomanip>
#include <climits>
#include <cctype>
#include <ctime>
using namespace std;
using ll = long long;
using ld = long double;
//mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
void dfs(int u, vector<int> &dp, vector<vector<int> > &g) {
auto cmp = [&](int kand1, int kand2) {
return dp[kand1] < dp[kand2];
};
for (int v: g[u]) {
dfs(v, dp, g);
dp[u] = max(dp[u], dp[v] + 1);
}
sort(g[u].begin(), g[u].end(), cmp);
}
void dfs_build(int u, ll &res, vector<int> &d, vector<int> &kands, vector<pair<int, int> > &pairs,
vector<vector<int> > &g) {
if (g[u].empty()) {
pairs[u] = {u, u};
return;
}
for (int v: g[u]) {
d[v] = d[u] + 1;
dfs_build(v, res, d, kands, pairs, g);
}
pairs[u] = {pairs[g[u].front()].first, pairs[g[u].back()].second};
int last = pairs[g[u].front()].second;
for (int i = 1; i < (int) g[u].size(); i++) {
res += d[last] + d[pairs[g[u][i]].first] - 2 * d[u];
kands.push_back(d[last] + d[pairs[g[u][i]].first] - 2 * d[u] - d[pairs[g[u][i]].first]);
last = pairs[g[u][i]].second;
}
}
void solve() {
int n, k;
cin >> n >> k;
vector<vector<int> > g(n);
for (int i = 1; i < n; i++) {
int p;
cin >> p;
g[p - 1].push_back(i);
}
vector<int> dp(n);
dfs(0, dp, g);
vector<int> kand;
vector<int> d(n);
vector<pair<int, int> > pairs(n);
ll res = 0;
dfs_build(0, res, d, kand, pairs, g);
res += d[pairs[0].first];
sort(kand.begin(), kand.end());
for (int i = 0; i < k && !kand.empty(); i++) {
res = min(res, res - kand.back());
kand.pop_back();
}
cout << res << '\n';
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int tt = 1;
while (tt--) {
solve();
}
return 0;
}