write a go solution for Description: This is the hard version of the problem. The only differences between the two versions of this problem are the constraints on n and the time limit. You can make hacks only if all versions of the problem are solved. You are given two arrays a and b of length n. You can perform the following operation some (possibly zero) times: 1. choose l and r such that 1<=l<=r<=n. 2. let x=max(a_l,a_l+1,ldots,a_r). 3. for all l<=i<=r, set a_i:=x. Determine if you can make array a equal to array b. Input Format: Each test contains multiple test cases. The first line contains an integer t (1<=t<=10^4) — the number of test cases. The description of the test cases follows. The first line of each test case contains a single integer n (1<=n<=2*10^5) — the length of the arrays. The second line contains n integers a_1,a_2,ldots,a_n (1<=a_i<=n) — the elements of array a. The third line contains n integers b_1,b_2,ldots,b_n (1<=b_i<=n) — the elements of array b. It is guaranteed that the sum of n over all test cases does not exceed 2*10^5. Output Format: For each test case, output "YES" (without quotes) if you can make a into b using any number of operations, and "NO" (without quotes) otherwise. You can output "YES" and "NO" in any case (for example, strings "yES", "yes" and "Yes" will be recognized as a positive response). Note: In the first test case, we can achieve array b by applying a single operation: (l,r)=(2,3). In the second test case, it can be shown we cannot achieve array b in any amount of operations. In the third test case, we can achieve array b by applying two operations: (l,r)=(2,5). followed by (l,r)=(1,3). In the fourth and fifth test cases, it can be shown we cannot achieve array b in any amount of operations.. Output only the code with no comments, explanation, or additional text.