小红的双排列查询
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小红拿到了一个长为 n 的数组 \{a_1,a_2,\dots,a_n\} 。
\hspace{15pt}小芳对双排列很感兴趣,向小红提出了 q 个问题,每个问题由两个整数 l,r\left(1 \leqq l < r\leqq n\right) 组成,需要回答:
\hspace{23pt}\bullet\,子数组 \{a_l,a_{l + 1},\dots,a_r\} 是否为双排列
\hspace{15pt}小红被难住了,请你帮帮他。

【名词解释】
\hspace{15pt}双排列:长度为 2\times n 的双排列为两个长度为 n 的排列打乱顺序后得到的数组。
\hspace{15pt}排列:长度为 n 的排列是由 1,2,\dots,n 这 n 个整数、按任意顺序组成的数组(每个整数均恰好出现一次)。例如,\{2,3,1,5,4\} 是一个长度为 5 的排列,而 \{1,2,2\} 和 \{1,3,4\} 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。

输入描述:

\hspace{15pt}第一行输入两个整数 n,q \left(2\leqq n \leqq 2.5\times 10^{5};\ 1 \leqq q \leqq 2.5 \times 10^{5}\right),表示数组长度、询问次数。
\hspace{15pt}第二行输入 n 个整数 a_1,a_2,\dots,a_n\left(1 \leqq a_i \leqq 2\times10^{5}\right),表示数组的元素。
\hspace{15pt}之后 q 行,第 i 行输入两个整数 l_i, r_i\left(1 \leqq l_i < r_i \leqq n\right),表示第 i 个询问的区间。

输出描述:

\hspace{15pt}对于每次询问,新起一行。如果区间是双排列,输出 \texttt{Yes} ,否则输出 \texttt{No}
示例1

输入

复制
6 2
1 1 4 5 1 4
1 2
2 4

输出

复制
Yes
No