private Node firstIntersectionNode( Node node, K key ) {
        if( node == null ) {
            return null;
        }

        Node ret = null;
        while( true ) {
            if( mComp.compareMinToMax( key, node.mKey ) < 0 && mComp.compareMinToMax( node.mKey, key ) < 0 ) {
                ret = node;
            }

            // Descend left subtree if it might intersect.
            if( node.mLeft != null && mComp.compareMinToMax( key, node.mLeft.mMaxStop.mKey ) < 0 ) {
                node = node.mLeft;
                continue;
            }

            // Descend right subtree if possible, and if the current node
            // doesn't already intersect.
            if( node.mRight != null && ret != node && mComp.compareMinToMax( key, node.mRight.mMaxStop.mKey ) < 0 ) {
                node = node.mRight;
                continue;
            }

            return ret;
        }
    }