H:数列操作
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小 Z 被给予了一个包含 n 个正整数的的数列 a_1,a_2,\cdots,a_n,并且满足 a_i \in [1,k]

小 Z 将会收到 m 条请求,请求有两种类型:

1. 类型 1:`1 p v`,表示小 Z 需要编号 p 对应的数的权值为 v,即将 a_p 修改为 v。保证 1\le p \le n, 1\le v \le k
2. 类型 2:`2`,表示需要求出最短的权值包含 1,2,3,\cdots,k 中所有数的连续数列的长度。

输入描述:

第一行输入 3 个整数 n,k,m,分别表示数列的长度,题目中的 k 参数以及请求操作的次数。

第二行输入 n 个整数 a_1,a_2,\cdots,a_n.

接下来是 m 次请求,每次请求形如 `1 p v` 或 `2`。

输出描述:

对于相应的请求输出答案,如果没有答案则输出 `-1`。
示例1

输入

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

输出

复制
3
-1
4
示例2

输入

复制
6 3 6
1 2 3 2 1 1
2
1 2 1
2
1 4 1
1 6 2
2

输出

复制
3
3
4

备注:

对于 20\% 的数据,1\le n, m \le 300, k \le 10

对于 50\% 的数据,1\le n, m \le 5000, k \le 10

另有 20\% 的数据,1\le n, m\le 50000, k \le 3

对于 90\% 的数据,1\le n, m\le 50000, k \le 10

对于 100\% 的数据,1\le n, m\le 50000, k \le 30