#include <stdio.h>
#include <vector>

using namespace std;
typedef long long ll;

const int N = 200500;
int n, m;
int dep[N], mdep;
vector < int > e[N];
ll ans;

inline ll max(ll a, ll b) { return a > b ? a : b; }

ll dfs(int v) {
	if (e[v].empty()) {
		return (mdep + 1) * (m - 1LL);
	}
	ll d1 = 0, d2 = 0;
	for (int nv : e[v]) {
		ll x = dfs(nv) + 1;
		if (x > d2) {
			if (x > d1) {
				d2 = d1;
				d1 = x;
			}
			else {
				d2 = x;
			}
		}
	}
	ans = max(ans, d1 + d2);
	return d1;
}

int main() {
	freopen("input.dat", "r", stdin);
	freopen("output.sol", "w", stdout);

	// code here.
	scanf("%d%d", &n, &m);
	for (int i = 1; i < n; ++i) {
		int x;
		scanf("%d", &x);
		--x;
		e[x].push_back(i);
		mdep = max(mdep, dep[i] = dep[x] + 1);
	}
	dfs(0);
	printf("%lld\n", ans + 1);

	return 0;
}