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 # Prepare sorted_h and prefix_max sorted_h = sorted(zip(H, T), key=lambda x: x[0]) hs = [h for h, t in sorted_h] ts = [t for h, t in sorted_h] prefix_max = [] current_max = -1 for t in ts: if t > current_max: current_max = t prefix_max.append(current_max) # Process each query for A, B in queries: H_b = H[B] T_a = T[A] if H_b <= T_a: print(1) continue current_max_t = T_a steps = 1 found = False while True: # Find the largest index where H <= current_max_t idx = bisect.bisect_right(hs, current_max_t) - 1 if idx < 0: print(-1) break new_max = prefix_max[idx] if new_max <= current_max_t: print(-1) break steps +=1 current_max_t = new_max if current_max_t >= H_b: print(steps) break if __name__ == '__main__': main()