def METHOD_NAME(self, catalogue, config):
    '''
    Calculates Maximum magnitude
    :param catalogue:
        Earthquake catalogue as instance of :class:
        openquake.hmtk.seismicity.catalogue.Catalogue
    :param dict config:
        Configuration file for algorithm, contains the attributes:
        * 'b-value': b-value (positive float)
        * 'input_mmin': Minimum magnitude for integral (if less than
        minimum observed magnitude, will be overwritten by
        minimum observed magnitude)
        * 'tolerance': Tolerance of stabilising of iterator
        * 'maximum_interations': Maximum number of iterations
    :returns: **mmax** Maximum magnitude and **mmax_sig** corresponding
                uncertainty
    '''
    config = check_config(config, catalogue.data)
    obsmax, obsmaxsig = _get_observed_mmax(catalogue.data, config)
    mmin = config['input_mmin']
    beta = config['b-value'] * np.log(10.)
    neq, mmin = _get_magnitude_vector_properties(catalogue.data, config)
    mmax = np.copy(obsmax)
    d_t = np.inf
    iterator = 0
    print(mmin, mmax, neq, beta)
    while d_t > config['tolerance']:
        delta = quadrature(self._ks_intfunc, mmin, mmax,
                           args=(neq, mmax, mmin, beta))[0]
        tmmax = obsmax + delta
        d_t = np.abs(tmmax - mmax)
        mmax = np.copy(tmmax)
        iterator += 1
        if iterator > config['maximum_iterations']:
            print('Kijko-Sellevol estimator reached '
                  'maximum # of iterations')
            d_t = -np.inf
    return mmax.item(), np.sqrt(obsmaxsig ** 2. + delta ** 2.)