#include #include using namespace std; using namespace atcoder; // using mint = modint1000000007; // const int mod = 1000000007; // using mint = modint998244353; // const int mod = 998244353; // const int INF = 1e9; // const long long LINF = 1e18; #define rep(i, n) for (int i = 0; i < (n); ++i) #define rep2(i, l, r) for (int i = (l); i < (r); ++i) #define rrep(i, n) for (int i = (n)-1; i >= 0; --i) #define rrep2(i, l, r) for (int i = (r)-1; i >= (l); --i) #define all(x) (x).begin(), (x).end() #define allR(x) (x).rbegin(), (x).rend() #define P pair template inline bool chmax(A& a, const B& b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(A& a, const B& b) { if (a > b) { a = b; return true; } return false; } struct S { // (,) int l, r, s; void dump() { cout << l << " " << r << " " << s << endl; } }; S op(S l, S r) { S ret = { 0,0,0 }; ret.r = l.r + r.r; ret.l = l.l + r.l; ret.s = l.s + r.s; int add = min(l.l, r.r); ret.r -= add; ret.l -= add; ret.s += add * 2; return ret; } S e() { return { 0,0,0 }; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, q; cin >> n >> q; string s; cin >> s; vectora(n, e()); rep(i, n) { if (s[i] == '(')a[i] = { 1,0,0 }; if (s[i] == ')')a[i] = { 0,1,0 }; } segtreeseg(a); while (q--) { int t; cin >> t; if (t == 1) { int x, t; cin >> x >> t; x--; if (t == 1)a[x] = { 1,0,0 }; if (t == 2)a[x] = { 0,1,0 }; seg.set(x, a[x]); } else { int l, r; cin >> l >> r; l--; auto val = seg.prod(l, r); cout << val.s << endl; } } return 0; }