private Node ceilingNode( K key ) {
        if( key == null ) {
            return null;
        }

        Node node = mRoot;
        Node eqRet = null;
        Node gtRet = null;

        IntervalComparator<? super K> comp = mComp;

        while( node != null ) {
            int c = comp.compareMins( key, node.mKey );
            if( c == 0 ) {
                c = comp.compareMaxes( key, node.mKey );
            }

            if( c < 0 ) {
                gtRet = node;
                node = node.mLeft;
            } else if( c == 0 ) {
                eqRet = node;
                node = node.mLeft;
            } else {
                node = node.mRight;
            }
        }

        return eqRet == null ? gtRet : eqRet;
    }