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

题目描述

给定一个长度为 n 整数序列 \{a\} \ (\sum_{i=1}^n a_i \leq 10^5)。假设我们可以把这些数字排成一行,从左到右编号分别为 1,2,\ldots,n,那么我们定义一个序列的 mex 值为这个序列里没有出现的最小自然数。例如,对于数字集合 \{1,3,0,2,4\},它的 mex 值为 5。请你编写一个程序,支持以下两种操作:

1. 给定两个整数 l,r,查询数组区间 [l,r] 中的 mex 值。
2. 给定两个整数 p,x,将 a_p 修改成 x。保证完成修改操作后 \sum_{i=1}^n a_i \leq 10^5

输入描述:

第一行,两个整数 n,q(1\leq n,q \leq 10^5)

第二行,n 个整数 {a_i}(0 \leq a_i \leq 10^5)

接下来 q 行,每行一个询问。

第一类操作由三个整数描述 t_i=1,l_i,r_i(1 \leq l_i \leq r_i \leq n),你需要回答区间 [l_i,r_i]mex 值。

第二类操作由三个整数描述 t_i=2,p_i,x_i(1 \leq p_i\leq n,0 \leq x_i \leq 10^5)

输出描述:

每行对于每一个第一类询问输出答案。
示例1

输入

复制
5 5
0 1 2 3 4
1 1 5
1 3 4
2 1 5
1 1 5
1 3 4

输出

复制
5
0
0
0