# https://yukicoder.me/problems/no/3652 from collections import deque class SegmentTree: """ 非再帰版セグメント木。 更新は「加法」、取得は「最大値」のもの限定。 """ def __init__(self, init_array): n = 1 while n < len(init_array): n *= 2 self.size = n self.array = [[0] * 3 for _ in range(2 * self.size)] for i, a in enumerate(init_array): if a == "(": self.array[self.size + i][0] = 0 self.array[self.size + i][1] = 1 self.array[self.size + i][2] = 0 else: self.array[self.size + i][0] = 0 self.array[self.size + i][1] = 0 self.array[self.size + i][2] = 1 end_index = self.size start_index = end_index // 2 while start_index >= 1: for i in range(start_index, end_index): self._op(self.array[i], self.array[2 * i], self.array[2 * i + 1]) end_index = start_index start_index = end_index // 2 def _op(self, array, left, right): m = min(left[1], right[2]) array[0] = left[0] + right[0] + m array[1] = left[1] + right[1] - m array[2] = left[2] + right[2] - m def set(self, x, a): index = self.size + x if a == "(": self.array[self.size + x][0] = 0 self.array[self.size + x][1] = 1 self.array[self.size + x][2] = 0 else: self.array[self.size + x][0] = 0 self.array[self.size + x][1] = 0 self.array[self.size + x][2] = 1 while index > 1: index //= 2 self._op(self.array[index],self.array[2 * index], self.array[2 * index + 1]) def get_value(self, l, r): L = self.size + l; R = self.size + r l_queue = deque() r_queue = deque() # 2. 区間[l, r)の最大値を求める while L < R: if R & 1: R -= 1 r_queue.appendleft(R) if L & 1: l_queue.append(L) L += 1 L >>= 1; R >>= 1 s = [0] * 3 while len(l_queue) > 0: r = l_queue.popleft() self._op(s, s, self.array[r]) while len(r_queue) > 0: r = r_queue.popleft() self._op(s, s, self.array[r]) return s def main(): N, Q = map(int, input().split()) S = input() queries = [] for _ in range(Q): values = tuple(map(int, input().split())) queries.append(values) seg_tree = SegmentTree(S) for values in queries: if values[0] == 1: _, x, t = values x = int(x) - 1 if t == 1: seg_tree.set(x, "(") else: seg_tree.set(x, ")") else: _, l, r = values l -= 1 r -= 1 ans = seg_tree.get_value(l, r + 1) print(ans[0] * 2) if __name__ == "__main__": main()