     for(int i =0; i <depth; i++)
     {
         myKey[i] = (localAIndex + i   < localAPartSize ? A_keys[myStartIdxA + aIndex+depth*tid+i]   : MAX_VAL);		
-        myVal[i] = (localAIndex + i   < localAPartSize ? A_vals[myStartIdxA + aIndex+depth*tid+i]   : MAX_VAL);
+        myVal[i] = (localAIndex + i   < localAPartSize ? A_vals[myStartIdxA + aIndex+depth*tid+i]   : UMAX_VAL);
     }
 
     if(bIndex + INTERSECT_B_BLOCK_SIZE_multi < localBPartSize) {

    for(int i =0; i <depth; i++)
    {
        myKey[i] = (localAIndex+ i   < localAPartSize ? A_keys[myStartIdxA + localAIndex+i]   : MAX_VAL);
        myVal[i] = (localAIndex + i   < localAPartSize ? A_vals[myStartIdxA + localAIndex+i]   : MAX_VAL);
    }
    
        

	T MAX_VAL = getMax<T>();
	T MIN_VAL = getMin<T>();

	unsigned int UMAX_VAL = getMax<unsigned int>();

    int myId = blockIdx.x;
    int myStartId = (myId%subPartitions) + 2*(myId/subPartitions)*subPartitions;
    int myStartIdxB = partitionBeginA[myStartId];
