def METHOD_NAME(num_modes, bc='dirichlet'):
    '''Return the orders for the first `num_modes` modes.
    Parameters
    ----------
    num_modes : int
        The number of modes to return.
    bc : string
        The boundary conditions to use. This can be either 'dirichlet', or
        'neumann' for a Dirichlet or Neumann boundary condition respectively.
    Returns
    -------
    list of tuples
        A list of orders (n, m).
    '''
    orders = [(1, 0)]
    energies = [disk_harmonic_energy(1, 0, bc)]
    results = []
    while len(results) < num_modes:
        k = np.argmin(energies)
        order = orders[k]
        if order[1] != 0:
            results.append((order[0], -order[1]))
        results.append(order)
        del orders[k]
        del energies[k]
        new_order = (order[0], order[1] + 1)
        if new_order not in results and new_order not in orders:
            orders.append(new_order)
            energies.append(disk_harmonic_energy(new_order[0], new_order[1], bc))
        new_order = (order[0] + 1, order[1])
        if new_order not in results and new_order not in orders:
            orders.append(new_order)
            energies.append(disk_harmonic_energy(new_order[0], new_order[1], bc))
    return results[:num_modes]