Pessoal, Dúvida sobre qual método sobrecarregado chamar

Estou lendo o livro da keity, e nele ela diz o seguinte: Quando uma correspondência exta não puder ser
encontrada ,a JVM usa o método com o menor argumento que seja mais amplo do que o parâmetro ", porém tenho um
parâmetro long, e o meu menor parâmetro(float) não é mais amplo que um long. Porque essa saída : float, float é gerada ?!


class GFC215 {

	static String m(float i) {
		return "float";
	}

	static String m(double i) {
		return "double";
	}

	public static void main(String[] args) {
		int a1 = 1;
		long b1 = 10;
		System.out.print(m(a1) +", "+ m(b1));

		/*
		 * " Em qualquer caso, quando uma correspondência exta não puder ser
		 *   encontrada,a JVM usa o método com o menor argumento que seja mais
		 *   amplo do que o parâmetro " - Palavras da Keity Sierra.
		 */
	}
}

Obrigado a todos.

na ordem crescente:

int
long
float
double

tem isso explicado no livro :?

A ordem utilizada pelo compilador:

Widening > Autoboxing > Var-args

" A ordem utilizada pelo compilador:

Widening > Autoboxing > Var-args "

Isso aqui é bem verdade, porém o que acontece é que como existem dois métodos -
um com o tipo float e outro com o tipo double, os dois se aplicam as chamadas, porque posso passar um int e um long
para um float. Então a JVM escolhe o mais específico, nesse caso o float.

Grato a todos que responderam.