 
 	T MAX_VAL = getMax<T>();
 	T MIN_VAL = getMin<T>();
+	unsigned int UMAX_VAL = getMax<unsigned int>();
 
     int myId = blockIdx.x;
     int myStartIdxB = 2*myId*sizePerPartition; 

        for(int i = 0;i < depth; i++) 
        { 
            myKey[i] =   (aIndex+depth*tid + i < sizePerPartition ? A_keys  [myStartIdxA + aIndex+ depth*tid + i]   : MAX_VAL); 
            myValue[i] = (aIndex+depth*tid + i < sizePerPartition ? A_values[myStartIdxA + aIndex+ depth*tid + i]   : MAX_VAL);	
        }
    }	


    for(int i =0; i <depth; i++)
    {
        myKey[i] =   (aIndex+depth*tid + i < partitionSizeA ? A_keys  [myStartIdxA + aIndex+depth*tid+i] : MAX_VAL);
        myValue[i] = (aIndex+depth*tid + i < partitionSizeA ? A_values[myStartIdxA + aIndex+depth*tid+i] : UMAX_VAL);
    }

    if(bIndex + INTERSECT_B_BLOCK_SIZE_simple < sizePerPartition) {
