拆迁入门
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}众所周知,猫猫会推倒一切看起来不应该被推倒的东西,而猫娘不一样,猫娘会用一些奇怪的方式推倒它来提高你的血压。
\hspace{15pt}本题与《C.加法入门》共享部分题目背景,这一部分我们使用特殊的格式标注。
〖引用开始〗
\hspace{15pt}Askalana 搭建了一个 n 层的麻将塔。从上往下数,第 i 层由 i 块麻将组成。每一块麻将上面都刻了一个整数,记第 i 层从左往右数第 j 块麻将上的数字为 a_{i,j}。如下所示:
\begin{array}{c}<br />a_{1,1}\\ <br />a_{2,1} \hspace{20pt} a_{2,2} \\ <br />a_{3,1} \hspace{20pt} a_{3,2} \hspace{20pt} a_{3,3} \\<br />\vdots \hspace{35pt} \vdots \hspace{35pt} \vdots \hspace{35pt} \vdots \\ <br />a_{n,1} \hspace{23pt} a_{n,2} \hspace{23pt} \cdots \hspace{23pt} a_{n,n} <br />\end{array}

\hspace{15pt}在本题中,每一块麻将上的整数都各不相同,且为 1\tfrac{n \times (n+1)}{2} 中的一个。Askalana 按整数从小到大的顺序,自上而下、自左而右的搭出了一座麻将塔。如下所示:
\begin{array}{c} <br />1 \\ <br />2 \hspace{40pt} 3 \\ <br />4 \hspace{40pt} 5 \hspace{40pt} 6 \\ <br />\vdots \hspace{47pt} \vdots \hspace{47pt} \vdots \hspace{47pt} \vdots \\ <br />{\tfrac{n \times (n-1)}{2} + 1} \quad {\tfrac{n \times (n-1)}{2} + 2} \qquad \cdots \qquad {\tfrac{n \times (n-1)}{2}+n}<br />\end{array}
〖引用结束〗
\hspace{15pt}除最下层外,每块麻将的左、右两角分别由两块麻将支撑。
\hspace{15pt}这一回,还没等 Askalana 回房间休息,猫猫小姐就快速的向 k 块麻将出爪,将它们推倒了。而如果一块麻将左下、右下的两块支撑麻将都被推倒了,那么这块麻将也会被推倒,这就是连锁反应。
\hspace{15pt}Askalana 想知道,如果猫猫推倒了 a_1, a_2, \dots, a_kk 块麻将,连锁反应会导致最终有多少块麻将被推倒?

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 100\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}第一行输入两个正整数 n,k\left(1 \leqq n \leqq 10^9;\ 1 \leqq k \leqq 3 \times 10^5\right) 代表麻将塔的层数、猫猫推倒的麻将数量。
\hspace{15pt}第二行输入 k 个不同的正整数 a_1,a_2,\dots,a_k\left(1 \leqq a_i \leqq \tfrac{n\times(n+1)}{2}\right) 代表被猫猫推倒的麻将的编号。

\hspace{15pt}除此之外,保证单个测试文件的 k 之和不超过 3 \times 10^5

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行。输出一个整数,代表连锁反应最终会导致多少块麻将被推倒。
示例1

输入

复制
3
5 6
11 12 14 15 8 9
3 3
4 5 6
1 1
1

输出

复制
14
6
1