using System; using System.Collections.Generic; using System.Linq; class G { static int[] Read() => Array.ConvertAll(Console.ReadLine().Split(), int.Parse); static (int, int) Read2() { var a = Read(); return (a[0], a[1]); } static void Main() => Console.WriteLine(Solve()); static object Solve() { var (n, qc) = Read2(); var s = Console.ReadLine(); var qs = Array.ConvertAll(new bool[qc], _ => Read2()); var map = Array.ConvertAll(new bool[n + 1], _ => new List()); var end = new int[qc]; for (int qi = 0; qi < qc; qi++) { var (x, y) = qs[qi]; map[x].Add(qi); map[y].Add(qi); end[qi] = Math.Max(x, y); } // 片方が通過したクエリの ID var umap = Array.ConvertAll(map, _ => new List()); var r = new (int l, int r)[qc]; var st = new Stack(); st.Push(0); for (int i = 1; i <= n; i++) { if (s[i - 1] == '(') { st.Push(i); foreach (var qi in map[i]) if (i < end[qi]) umap[i].Add(qi); } else { var l = st.Pop(); var pl = st.Peek(); foreach (var qi in map[i]) if (i < end[qi]) umap[l].Add(qi); foreach (var qi in umap[l]) { if (end[qi] <= i) { r[qi] = (l, i); } else { umap[pl].Add(qi); } } } } return string.Join("\n", r.Select(p => p.l == 0 ? "-1" : $"{p.l} {p.r}")); } }