编程题
### 问题描述
小明得到了一个长度为 $n$ 的字符串 $s$ ,该字符串都是由数字 $0$ 和 $1$ 组成,并且下标从 $1$ 开始,小明现在需要对这个字符串进行 $q$ 次操作,每次操作包含以下两种操作之一:
- 操作 $1$ :小明查询该字符串中第一次出现 $1$ 的位置,并将其输出,**如果字符串中不存在 $1$ 则输出 $-1$** 。
- 操作 $2$ :小明选择一个下标,将字符串 $s$ 中对应该下标的值反转,即 $1$ 变为 $0$ ,$0$ 变为 $1$ 。
小明想在短时间内快速计算出每次操作二的值,你能帮帮他吗。
### 输入格式
第一行,包含两个正整数 $n,q$ $(1\leq n,q\leq 2\times 10^5)$ ,代表字符串的长度。
第二行,一个字符串 $s$ $(1\leq |s|\leq n)$ ,代表输入的字符串。
接下来 $q$ 行,每行输入格式为一下之一:
- `1` ,代表将字符串中下标为 $x$ 的字符反转。
- `2 x` ,代表小明要查询该字符串中第一次出现 $1$ 的位置,并将其输出。
### 输出格式
对于每个操作 $2$ ,小明都会输出一行,包含一个正整数,代表该字符串中第一次出现 $1$ 的位置,**如果字符串中不存在 $1$ 则输出 $-1$** 。
### 输入样例
```
6 5
010011
1
2 2
1
2 6
1
```
### 输出样例
```
2
5
5
```
### 样例说明
样例中:
小明的第一次操作是查询,我们可以得到字符串 “010011” 中第一次出现 ‘1’ 的位置为 $2$ 。
小明的第二次操作将下标为 $2$ 的字符反转,此时字符串变为 “000011” 。
小明的第三次操作是查询,我们可以得到字符串 “000011” 中第一次出现 ‘1’ 的位置为 $5$ 。
小明的第四次操作是将下标为 $6$ 的字符反转,此时字符串变为 “000010” 。
小明的第五次操作是查询,我们可以得到字符串 “000010” 中第一次出现 ‘1’ 的位置为 $5$ 。