看电影是一件复杂的事情。你已经将现有的电影分成了两个列表:
- 包含 $N$ 部电影的主列表。
- 包含 $K$ 部电影的次列表。
因此,你总共有 $N + K$ 部电影。每部电影都有一个不同的整数评分,取值范围为集合 $\{1, 2, \dots, N + K\}$。
由于你不想连续观看太多烂片或太多好片,你设计了以下观看算法:
- 在每一步中,你从主列表中取出一部电影观看。它随后会从主列表中消失。
- 你选择的电影必须在当前可用的最差电影和最好电影之间交替。第一次选择必须是最好的电影。评分最低的电影被视为最差,评分最高的电影被视为最好。只有包含在主列表中的电影才是可用的。
- 观看完选定的电影后,你将从次列表中选择另一部电影,并将其插入到主列表的任意位置。一旦次列表为空,你将停止观看电影。注意,这意味着主列表将始终恰好包含 $N$ 部电影。
你希望你的主列表按电影评分升序排列。因为你太懒了,不想手动整理列表,所以你不会对列表本身做任何操作。相反,在算法的每一步中,你将决定插入哪部电影以及将其插入到主列表的什么位置,从而使主列表变得有序所需的步数最小化。
输入格式
第一行包含两个整数 $N$ 和 $K$ ($1 \le N \le 100\,000, 1 \le K \le 200\,000$)。 第二行包含 $N$ 个整数:主列表中的电影。 第三行包含 $K$ 个整数:次列表中的电影。 保证主列表评分和次列表评分的并集等于集合 $\{1, 2, \dots, N + K\}$。
输出格式
输出一行,包含一个整数:使主列表有序所需的最少步数,如果不可能,则输出 $-1$。
样例
输入 1
5 5 3 1 5 2 4 6 8 7 9 10
输出 1
4
说明 1
在第一步中,你将观看评分为 5 的电影,因为它是当前可用的最好电影。然后,你必须补充主列表。你通过从次列表中插入评分为 7 的电影到主列表的末尾来完成此操作。它们现在看起来像这样:
Main = [3 1 2 4 7] Secondary = [6 8 9 10]
在第二步中,轮到你观看最差的电影,所以你观看评分为 1 的电影。你用评分为 8 的电影替换它,并再次将其放在列表末尾。
Main = [3 2 4 7 8] Secondary = [6 9 10]
在第三步中,你观看评分为 8 的电影(当前可用的最好电影),并将评分为 9 的电影添加到列表末尾。
Main = [3 2 4 7 9] Secondary = [6 10]
在第四步中,你观看评分为 2 的电影(当前可用的最差电影),并将评分为 10 的电影添加到列表末尾。
Main = [3 4 7 9 10] Secondary = [6]
主列表现在按升序排列,因此答案是 4。注意,尽管此示例中的所有插入都发生在主列表的末尾,但这并非必须。电影可以插入到主列表的任何位置。