← Home
package main

import (
	"fmt"
	"os"
)

func main() {
	buffer, _ := os.ReadFile("/dev/stdin")
	cursor := 0
	nextInt := func() int {
		for cursor < len(buffer) && (buffer[cursor] < '0' || buffer[cursor] > '9') {
			cursor++
		}
		if cursor >= len(buffer) {
			return 0
		}
		res := 0
		for cursor < len(buffer) && buffer[cursor] >= '0' && buffer[cursor] <= '9' {
			res = res*10 + int(buffer[cursor]-'0')
			cursor++
		}
		return res
	}

	n := nextInt()
	if n == 0 {
		return
	}
	k := nextInt()

	head := make([]int, n+1)
	for i := 1; i <= n; i++ {
		head[i] = -1
	}
	next := make([]int, n+1)

	for i := 2; i <= n; i++ {
		p := nextInt()
		next[i] = head[p]
		head[p] = i
	}

	depth := make([]int, n+1)
	order := make([]int, 0, n)
	order = append(order, 1)
	depth[1] = 0

	for i := 0; i < n; i++ {
		u := order[i]
		for v := head[u]; v != -1; v = next[v] {
			depth[v] = depth[u] + 1
			order = append(order, v)
		}
	}

	f := make([]int, n+1)
	g := make([]int, n+1)
	min_d := make([]int, n+1)

	for i := n - 1; i >= 0; i-- {
		u := order[i]
		if head[u] == -1 {
			f[u] = 1
			g[u] = 1
			min_d[u] = depth[u]
			continue
		}

		min_d[u] = 1000000000
		for v := head[u]; v != -1; v = next[v] {
			if min_d[v] < min_d[u] {
				min_d[u] = min_d[v]
			}
		}

		sum_f_S1 := 0
		v_star := -1
		max_diff := -1000000000

		for v := head[u]; v != -1; v = next[v] {
			if min_d[v] == min_d[u] {
				v_star = v
			}
			if min_d[v]-depth[u] <= k {
				sum_f_S1 += f[v]
				diff := g[v] - f[v]
				if diff > max_diff {
					max_diff = diff
				}
			} else {
				diff := g[v]
				if diff > max_diff {
					max_diff = diff
				}
			}
		}

		if min_d[u]-depth[u] <= k {
			f[u] = sum_f_S1
		} else {
			f[u] = f[v_star]
		}
		g[u] = sum_f_S1 + max_diff
	}

	fmt.Println(g[1])
}