def gcd(a,b): while b: a,b = b,a%b return a def getstep(A): step = [1] * N for i in xrange(N): p = s[i] cnt = 0 while p != A[i] - 1: p = s[p] step[i] += 1 cnt += 1 if cnt > N: step[i] = -1 break return step N = int(raw_input()) K = int(raw_input()) s = range(N) for loop in xrange(K): X,Y = map(int,raw_input().split()) X -= 1; Y -= 1 s[X],s[Y] = s[Y],s[X] step = getstep(range(1, N + 1)) MX = reduce(lambda a,b:a*b/gcd(a,b), step) Q = int(raw_input()) for loop in xrange(Q): A = map(int, raw_input().split()) step = [1] * N for i in range(N): p = s[i] cnt = 0 while p != A[i] - 1: p = s[p] step[i] += 1 cnt += 1 if cnt > N: step[i] = - 1 break if -1 not in step: ans = reduce(lambda a,b:a*b/gcd(a,b), step) print ans if ans <= MX else -1 else: print -1