n, k = [int(x) for x in input().split()]

values = [int(x) for x in input().split()]
parent = [-1] + [int(input()) for _ in range(n-1)]
children = [[] for _ in range(n)]

for l in range(1, n):
    children[parent[l]].append(l)

toposort = [0]
idx = 0

while idx < len(toposort):
    toposort.extend(children[toposort[idx]])
    idx += 1

paths = []
best_len = [0]*n

for x in reversed(toposort):
    if len(children[x]) == 0:
        best_len[x] = 1
    else:
        sub_len = sorted([best_len[y] for y in children[x]])
        best_len[x] = sub_len[-1] + 1
        paths.extend(sub_len[:-1])

paths.append(best_len[0] - 1)
values.sort()
paths.sort()

print(sum(a*b for a, b in zip(values, paths)))
