#include using namespace std; template struct binary_indexed_tree{ int N; vector BIT; binary_indexed_tree(vector &A){ N = A.size(); BIT = vector(N + 1, 0); for (int i = 0; i < N; i++){ BIT[i + 1] = A[i]; } for (int i = 1; i < N; i++){ if (i + (i & -i) <= N){ BIT[i + (i & -i)] += BIT[i]; } } } void add(int i, T x){ i++; while (i <= N){ BIT[i] += x; i += i & -i; } } T sum(int i){ T ans = 0; while (i > 0){ ans += BIT[i]; i -= i & -i; } return ans; } T sum(int L, int R){ return sum(R) - sum(L); } }; int main(){ int N, Q; cin >> N >> Q; string S; cin >> S; vector A(N - 1, 0); for (int i = 0; i < N - 1; i++){ if (S[i] == '(' && S[i + 1] == ')'){ A[i]++; } } binary_indexed_tree BIT(A); for (int j = 0; j < Q; j++){ int t; cin >> t; if (t == 1){ int i; cin >> i; i--; if (i > 0){ if (S[i - 1] == '(' && S[i] == ')'){ BIT.add(i - 1, -1); } } if (i < N - 1){ if (S[i] == '(' && S[i + 1] == ')'){ BIT.add(i, -1); } } if (S[i] == '('){ S[i] = ')'; } else { S[i] = '('; } if (i > 0){ if (S[i - 1] == '(' && S[i] == ')'){ BIT.add(i - 1, 1); } } if (i < N - 1){ if (S[i] == '(' && S[i + 1] == ')'){ BIT.add(i, 1); } } } if (t == 2){ int l, r; cin >> l >> r; l--; cout << BIT.sum(l, r - 1) << endl; } } }