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])
}