Kevin的七彩旗
题号:NC255606
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

当尖锐眼光,
当刺耳声响,
你用彩虹的浪漫温柔包装。
                                                    —— Isaac Chen

氧气少年有一个长度为 n 的序列 a,现在要将序列 a 分割成一些互不相交的子段,再从中选出一些子段,将他们拼接成一个长度为 m 的美丽的序列。

请回忆序列子段的定义:一个序列的子段是指从原始序列中截取出的连续一部分元素序列,包括起始位置的元素和结束位置的元素。

一个长度为 m 的美丽的序列指的是:一个严格递增的长度为 m 的排列,即类似于 [1, 2, \dots, m] 这样的序列。

请求出至少需要从序列 a 中选出多少互不相交的子段,才能拼接成一个美丽的序列。或者指出无法拼接成美丽的序列。

例如:当 n=10,m=7,a=[2,1,4,5,6,7,3,4,1,2] 时,可以先将序列分割成 [2,1,4],[5,6,7],[3,4],[1,2],然后从中选出 3 个子段:[5,6,7],[3,4],[1,2],最后将他们调整顺序方可拼接成序列 [1,2,3,4,5,6,7]。因此答案为 3

例如:当 n=2,m=2,a=[1,2] 时,无需分割序列,将整个序列作为 1 个子段方可满足要求。因此答案为 1

输入描述:

第一行包含一个整数 T(1\leq T \leq 10^5),表示测试用例的组数。

对于每组测试用例:

第一行包含两个整数 n(1\leq n\leq 2\cdot 10^5),m(1\leq m\leq n)

第二行包含 n 个整数 a_1\dots a_n(1\leq a_i\leq 10^9),表示该序列。

保证对于所有的测试用例,n 的总和不超过 2\cdot 10^5

输出描述:

对于每组测试用例:

仅输出一行。如果无法拼成美丽的子段,输出 -1;否则请输出至少需要从序列 a 中选出的互不相交的子段的数量。
示例1

输入

复制
3
10 7
2 1 4 5 6 7 3 4 1 2
2 2
1 2
3 2
1 3 2

输出

复制
3
1
2

说明

样例解释见题目描述。