## https://yukicoder.me/problems/no/1778 from collections import deque def main(): N, Q = map(int, input().split()) S = input() xy = [] for _ in range(Q): x, y = map(int, input().split()) xy.append((x, y)) # 木を構成する in_map = {0:-1} out_map = {} k = 0 parents = {0:-1} depth = {0: 0} for i in range(N): s = S[i] if s == "(": in_map[i + 1] = -1 parents[i + 1] = k depth[i + 1] = depth[k] + 1 k = i + 1 else: in_map[k] = i + 1 out_map[i + 1] = k k = parents[k] # parents_list = k = 0 while (1 << k) < N: k += 1 max_k = k parents_list = [[-1] * N for _ in range(max_k + 1)] for c, p in parents.items(): parents_list[0][c] = p for k in range(1, max_k + 1): for i in range(N): p = parents_list[k - 1][i] if p != -1: parents_list[k][i] = parents_list[k - 1][p] for x, y in xy: if x in out_map: x = out_map[x] if y in out_map: y = out_map[y] d_x = depth[x] d_y = depth[y] if d_x > d_y: x, y, d_x, d_y = y, x, d_y, d_x # d_x <= d_yを仮定する if d_x < d_y: for k in reversed(range(max_k + 1)): if d_y - (1 << k) >= d_x and parents_list[k][y] != -1: y = parents_list[k][y] d_y -= (1 << k) if x == y: answer= x else: d = d_x for k in reversed(range(max_k + 1)): if d >= (1 << k) and parents_list[k][x] != parents_list[k][y]: x = parents_list[k][x] y = parents_list[k][y] d -= (1 << k) answer = parents_list[0][x] if answer == 0: print(-1) else: print(answer, in_map[answer]) if __name__ == "__main__": main()