import java.util.*; import java.io.*; import static java.lang.Math.*; public class Main { static ArrayList list1[]; static ArrayList list2[]; static int tree[][]; static int lazy[][]; static int n,m; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); PrintWriter pw = new PrintWriter(System.out,true); StringBuilder sb = new StringBuilder(); int t = Integer.parseInt(br.readLine()); while(t-->0) { StringTokenizer st = new StringTokenizer(br.readLine()); m = Integer.parseInt(st.nextToken()); n = Integer.parseInt(st.nextToken()); list1= new ArrayList[m+1]; list2 = new ArrayList[m+1]; for(int i=0;i<=m;++i) { list1[i] = new ArrayList(); list2[i] = new ArrayList(); } StringTokenizer st1 = new StringTokenizer(br.readLine()); StringTokenizer st2 = new StringTokenizer(br.readLine()); StringTokenizer st3 = new StringTokenizer(br.readLine()); for(int i=0;i>1; if(dp[mid]>=i) { if(dp[mid-1]r || high>1; rangeUpdate(treeidx,2*treein,low,mid,l,r,val); rangeUpdate(treeidx,2*treein+1,mid+1,high,l,r,val); tree[treeidx][treein] = max(tree[treeidx][2*treein],tree[treeidx][2*treein+1]); } static int query(int treeidx,int treein,int low,int high,int l,int r) { if(lazy[treeidx][treein]!=0) { tree[treeidx][treein]+=lazy[treeidx][treein]; if(low!=high) { lazy[treeidx][2*treein]+=lazy[treeidx][treein]; lazy[treeidx][2*treein+1]+=lazy[treeidx][treein]; } lazy[treeidx][treein] = 0; } if(l<=low && high<=r) return tree[treeidx][treein]; if(low>r || high>1; return max(query(treeidx,2*treein+1,mid+1,high,l,r),query(treeidx,2*treein,low,mid,l,r)); } }