 
 	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] = (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);
    }

    if(bIndex + INTERSECT_B_BLOCK_SIZE_multi < localBPartSize) {

            else {
                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]   : UMAX_VAL);
                }
            }			
            if(tid == CTASIZE_simple-1)		
