#include #include using namespace atcoder; #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; struct S { int l, r, num; }; S op(S a, S b) { int x = min(a.l, b.r); return S(a.l+b.l-x, a.r+b.r-x, a.num+b.num+x); } S e() { return S(0, 0, 0); } int main() { int n, q; string s; cin >> n >> q >> s; vector init(n); rep(i, n) { if (s[i] == '(') init[i] = S(1, 0, 0); else init[i] = S(0, 1, 0); } segtree seg(init); rep(qi, q) { int type; cin >> type; if (type == 1) { int x, t; cin >> x >> t; --x; if (t == 1) seg.set(x, S(1, 0, 0)); else seg.set(x, S(0, 1, 0)); } else { int l, r; cin >> l >> r; --l; int ans = seg.prod(l, r).num*2; cout << ans << '\n'; } } return 0; }