import java.io.*; import java.util.*; public class Solution { public static void main(String args[]) { StdIn in = new StdIn(); PrintWriter out = new PrintWriter(System.out); for(int t=in.nextInt(); t>0; --t) new Solver(in, out); out.close(); } static class Solver { Solver(StdIn in, PrintWriter out) { int m=in.nextInt(), n=in.nextInt(); int[] t = in.readIntArray(n), s = in.readIntArray(n), d=in.readIntArray(n); List ranges = new ArrayList(); for(int i=0; i() { public int compare(Range a, Range b) { return a.r-b.r; } }); SegTree dp1 = new SegTree(m+1), dp2 = new SegTree(m+1); int[] minZ = new int[n+1]; Arrays.fill(minZ, Integer.MAX_VALUE); for(int i=0; ia) dp1.add(rg.r, rg.r, b-a); } else { dp1.add(0, rg.l-1, 1); int a=dp2.max(rg.r, rg.r), b=dp1.max(0, rg.r-1); if(b>a) dp2.add(rg.r, rg.r, b-a); } int cM=Math.max(dp1.max(0, m-1), dp2.max(0, m-1)); minZ[cM]=Math.min(rg.r, minZ[cM]); } for(int i=n-1; i>=1; --i) minZ[i]=Math.min(minZ[i+1], minZ[i]); for(int i=1; i<=n; ++i) out.print((minZ[i]>=Integer.MAX_VALUE?-1:minZ[i]+1)+" "); out.println(); /*int[] dp = new int[m+1], minZ = new int[n+1]; Arrays.fill(minZ, Integer.MAX_VALUE); for(int i=m; i>=1; --i) minZ[dp[i]]=i; for(int i=n; i>=1; --i) minZ[i-1]=Math.min(minZ[i], minZ[i-1]); for(int i=1; i<=n; ++i) out.print((minZ[i]>=Integer.MAX_VALUE?-1:minZ[i]+1)+" "); out.println();*/ } class SegTree { int[] a, d; int n, l1, r1, x; SegTree(int n) { this.n=n; a = new int[4*n]; d = new int[4*n]; } private void push(int i, boolean leaf) { a[i]+=d[i]; if(!leaf) { d[2*i]+=d[i]; d[2*i+1]+=d[i]; } d[i]=0; } void add(int l, int r, int x) { l1=l; r1=r; this.x=x; add2(1, 0, n-1); } private void add2(int i, int l2, int r2) { if(l1<=l2&&r2<=r1) { d[i]+=x; push(i, l2==r2); } else { int m=(l2+r2)/2; push(2*i, l2==m); push(2*i+1, m+1==r2); if(l1<=m) add2(2*i, l2, m); if(m= '0' && c <= '9'); if (neg) return -ret; return ret; } public int[] readIntArray(int n) { int[] ar = new int[n]; for(int i=0; i= '0' && c <= '9'); if (neg) return -ret; return ret; } public long[] readLongArray(int n) { long[] ar = new long[n]; for(int i=0; i= '0' && c <= '9'); if (c == '.') while ((c = read()) >= '0' && c <= '9') ret += (c - '0') / (div *= 10); if (neg) return -ret; return ret; } private void fillBuffer() throws IOException { bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE); if (bytesRead == -1) buffer[0] = -1; } private byte read() { try{ if (bufferPointer == bytesRead) fillBuffer(); return buffer[bufferPointer++]; } catch(IOException e) { throw new RuntimeException(); } } public void close() throws IOException { if (din == null) return; din.close(); } } }