小Why的循环置换
题号:NC253680
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小Why有一个长度为 n 的全排列 a,定义 p_x 表示元素 x 在 a 中的下标。
小Why先将上述 n 个元素映射为图 G 中的点,之后对于每个点 x ,都向 p_x 连一条边。在完成这些操作后,图 G 中一共出现了 m 个环(包括自环)。
现在小Why告诉你可以对 a 执行以下操作任意多次:
\bullet 选择 a 中任意两个不同的元素,交换它们的位置。
小Why只打算告诉你 n 和 m,他想考考你至少需要多少次操作才能使得 a 单调递增。

输入描述:

第一行包含两个整数 n,m \ (1 \leq m \leq n \leq 10^9 ),表示图 G 中点的个数和环的个数。

输出描述:

输出一个整数,表示最少操作次数。
示例1

输入

复制
2 1

输出

复制
1