import bisect def main(): import sys input = sys.stdin.read data = input().split() ptr = 0 N = int(data[ptr]) ptr += 1 H = list(map(int, data[ptr:ptr + N])) ptr += N T = list(map(int, data[ptr:ptr + N])) ptr += N Q = int(data[ptr]) ptr += 1 queries = [] for _ in range(Q): A = int(data[ptr]) - 1 B = int(data[ptr + 1]) - 1 queries.append((A, B)) ptr += 2 # Preprocess max_T sorted_h = sorted(zip(H, T), key=lambda x: x[0]) h_list = [x[0] for x in sorted_h] t_list = [x[1] for x in sorted_h] prefix_max = [0] * len(t_list) current_max = 0 for i in range(len(t_list)): current_max = max(current_max, t_list[i]) prefix_max[i] = current_max max_T = [0] * N for i in range(N): target = T[i] idx = bisect.bisect_right(h_list, target) - 1 if idx >= 0: max_T[i] = prefix_max[idx] else: max_T[i] = 0 # Shouldn't happen per problem statement # Process queries results = [] for A, B in queries: if H[B] <= T[A]: results.append(1) else: if H[B] <= max_T[A]: results.append(2) else: results.append(-1) print('\n'.join(map(str, results))) if __name__ == '__main__': main()