#CF2139D. Antiamuny 想学习交换

Antiamuny 想学习交换

D. Antiamuny 想学习交换

每个测试的时间限制:2 秒
每个测试的内存限制:512 兆字节

对于一个长度为 (m) 的数组 (b),你可以执行以下两种操作:

  1. 选择一个下标 (1 \le i \le m - 1),然后交换 (b_i) 和 (b_{i+1}) 的值。
  2. 选择一个下标 (1 \le i \le m - 2),然后交换 (b_i) 和 (b_{i+2}) 的值。

但操作 2 最多只能使用一次

我们定义:

  • (f(b)) 为对数组 (b) 进行非降序排序所需的最少操作次数(可以使用操作 1 和操作 2)。
  • (g(b)) 为对数组 (b) 进行非降序排序所需的最少操作次数(只能使用操作 1)。

如果 (f(b) = g(b)),则称数组 (b) 是 完美的
换句话说,即使允许使用操作 2,也不能比只用操作 1 的排序次数更少。


你有一个长度为 (n) 的排列 (a),需要回答 (q) 个查询。
每个查询包含两个整数 (l) 和 (r)((1 \le l \le r \le n)),表示子数组 (a[l \dots r])。
对每个查询,判断该子数组 (a[l \dots r]) 是否是完美的。


输入格式

每个测试包含多个测试用例。第一行包含测试用例的数量 (t)((1 \le t \le 5 \cdot 10^4))。
每个测试用例的描述如下:

  • 第一行包含两个整数 (n, q)((1 \le n, q \le 5 \cdot 10^5))—— 数组 (a) 的长度和查询数量。
  • 第二行包含 (n) 个整数 (a_1, a_2, \dots, a_n)((1 \le a_i \le n))—— 排列 (a) 中的元素。
  • 接下来 (q) 行,每行包含两个整数 (l, r)((1 \le l \le r \le n))—— 查询的子数组的左右端点。

保证:所有测试用例的 (n) 之和与 (q) 之和均不超过 (5 \cdot 10^5)。


输出格式

对每个测试用例,如果查询的子数组 (a[l \dots r]) 是完美的,输出 "YES",否则输出 "NO"
输出大小写不敏感(例如 "yEs", "yes", "Yes", "YES" 均视为肯定回答)。


示例

输入

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

输出

YES
NO
NO
NO
NO
YES
YES
NO
YES
YES

注释

第一个测试用例

  • 查询 1:(a[1 \dots 2] = [1, 5]) 已经是非降序的。所以 (f = g = 0),完美。
  • 查询 2:(a[1 \dots 5] = [1, 5, 4, 3, 2])。
    可以用以下操作序列在 4 步内排序:
    [ [1,5,4,3,2] \xrightarrow{\text{op2}} [1,3,4,5,2] \xrightarrow{\text{op1}} [1,3,4,2,5] \xrightarrow{\text{op1}} [1,3,2,4,5] \xrightarrow{\text{op1}} [1,2,3,4,5] ]
    而 (g = 6)(至少需要 6 次相邻交换)。
    因为 (f \ne g),所以不完美。
  • 查询 3:(a[3 \dots 5] = [4,3,2])。
    可以用 1 步排序:
    [ [4,3,2] \xrightarrow{\text{op2}} [2,3,4] ]
    而 (g = 3)(至少需要 3 次相邻交换)。
    因为 (f \ne g),所以不完美。