mod = 1000000007 eps = 10**-9 def main(): import sys input = sys.stdin.readline def STfunc(a, b): if a[0] < b[0]: return a else: return b # クエリは0-indexedで[l, r) class SparseTable(): def __init__(self, A): # A: 処理したい数列 self.N = len(A) self.K = self.N.bit_length() - 1 self.table = [[0] * (self.K + 1) for _ in range(self.N)] for i, a in enumerate(A): self.table[i][0] = a for k in range(1, self.K + 1): for i in range(self.N): j = i + (1 << (k - 1)) if j <= self.N - 1: self.table[i][k] = STfunc(self.table[i][k - 1], self.table[j][k - 1]) else: self.table[i][k] = self.table[i][k - 1] def query(self, l, r): # [l, r)の最小値を求める k = (r - l).bit_length() - 1 return STfunc(self.table[l][k], self.table[r - (1 << k)][k]) # adj[0] must be empty list def EulerTour(adj, root): st = [root] ret = [] seen = [0] * len(adj) par = [0] * len(adj) depth = [0] * len(adj) while st: v = st.pop() if seen[v]: ret.append(v) continue ret.append(v) seen[v] = 1 if par[v] != 0: st.append(par[v]) for u in adj[v]: if seen[u] == 0: st.append(u) par[u] = v depth[u] = depth[v] + 1 return ret, depth N, Q = map(int, input().split()) S = input().rstrip('\n') P = [0] * (N+1) adj = [[] for _ in range(N+2)] st = [] for i, s in enumerate(S): if s == "(": st.append(i+1) else: j = st.pop() P[i+1] = j P[j] = i+1 if st: adj[j+1].append(st[-1] + 1) adj[st[-1] + 1].append(j+1) else: adj[j+1].append(1) adj[1].append(j+1) et, depth = EulerTour(adj, 1) depth_list = [None] * len(et) left = [-1] * (N + 2) right = [-1] * (N + 2) for i, v in enumerate(et): depth_list[i] = (depth[v], v) if left[v] < 0: left[v] = i right[v] = i ST = SparseTable(depth_list) for _ in range(Q): x, y = map(int, input().split()) xx, yy = P[x], P[y] if x > xx: x, xx = xx, x if y > yy: y, yy = yy, y lca_depth, lca = ST.query(min(left[x+1], left[y+1]), max(right[x+1], right[y+1]) + 1) if lca != 1: print(lca - 1, P[lca - 1]) else: print(-1) if __name__ == '__main__': main()