#SummerP0097. 软件包

软件包

Description

某个神秘操作系统的软件依赖可以看作是一个树形结构1^1,Timothy 在这个系统上面已经安装了一个软件,软件需要一些前置依赖软件包,如果确定这个软件正常运行,当且仅当满足下面所有条件:

  1. 这个软件包没有损坏。
  2. 它的所有直接依赖(即其所有子节点)也都处于未损坏的状态。

可惜的是,Timothy 发现在经过滚动更新之后发现软件无法正确运行,现在他准备调查依赖是否正确;他每次操作可以选择一条链调查并修复路径上的错误,换句话说,他可以选择一个个依赖路径的终点 vv,修复包括从根节点 1v1\rightsquigarrow v 与其简单路径上的所有依赖错误。

现在给出所有损坏的软件包,请你帮他算算,最少需要多少次操作可以修复完所有的软件错误?

*1^1虽然众所周知依赖一般是一个 DAG 有向无环图,题目无需怀疑现实正确性

Format

Input

我们将软件包依次标号为 1,2,3,,n1,2,3,\cdots,n,其中 1 号一定为树根。

第一行包含空格隔开的两个整数 nnkk,满足 2n3×104,1kn2\leq n\leq 3\times 10^4,1\leq k\leq n,表示一共有 nn 个软件包以及其中 kk 个已经损坏。

第二行包含空格隔开的 n1n-1 个整数 a2,a3,a4,,ana_2,a_3,a_4,\cdots,a_{n},满足 1ain,aii1\leq a_i\leq n, a_i\neq i 表示软件包 aia_i 是软件包 ii 的依赖。由于软件包 1 是树根,所以它不是任何软件包的依赖。保证给出的一定是以 1 为树根的一棵树。

第三行包含 kk 个空格隔开的整数 b1,b2,,bkb_1,b_2,\cdots,b_k 满足 1bin1\leq b_i\leq n,表示损坏的软件包的序号。

Output

输出最小操作次数。

Samples

5 2
1 1 2 2
2 4
1
6 3
5 5 1 1 4
2 3 4
3

Note

对于第一组样例,如图所示,2,42,4 节点损坏

你只需要选择终点 44 从路径 1241\to 2\to 4 修复上面的所有错误。

对于第二组样例,如图所示,2,3,42,3,4 节点损坏

你需要选择终点 2,3,42,3,4 从路径

  1. 1521\to 5\to 2;
  2. 1531\to 5\to 3;
  3. 141\to 4;

修复所有错误,可以证明这是最优解之一。