import sys sys.setrecursionlimit(10**6) N,Q = map(int,input().split()) S = [0]+list(input()) V = N//2 K = 0 while 2**KN:return dfs(indv) else: u = dp[v][0] T[v].append(ind) ind += 1 if ind>N:return dfs(u) dfs(0) T[0].append(ind) invT = [0]*(N+2) for v in range(V+1): i0,i1 = T[v] invT[i0] = v invT[i1] = v for k in range(1,K+1): for i in range(1,V+1): dp[i][k] = dp[dp[i][k-1]][k-1] def lca(u,v): if dist[u]>dist[v]: u,v = v,u for k in range(K,-1,-1): if (dist[v]-dist[u])>>k & 1: v = dp[v][k] if u==v: return u for k in range(K,-1,-1): if dp[u][k]!=dp[v][k]: u = dp[u][k] v = dp[v][k] return dp[u][0] for _ in range(Q): x,y = map(int,input().split()) u = invT[x] v = invT[y] if u==v: print(*T[u]) else: a = lca(u,v) if a==0: print(-1) else: print(*T[a])