Fortran: el entero más grande y el más pequeño

Fortran es completamente nuevo para mí, ¿alguien puede ayudarme a resolver el siguiente problema? Quiero encontrar todos los números de tipo entero y el valor más grande y más pequeño para cada número de tipo en mi PC. Tengo el siguiente código:

program intkind
implicit none

integer :: n=1
integer :: integer_range =1


do while(integer_range /= -1)
    print*, "kind_number ", selected_int_kind(n)
    call rang(integer_range)
    n = n *2
    integer_range = selected_int_kind(n)
end do

contains
subroutine rang(largest) 
    integer largest
    print*, huge(largest)

end subroutine

end 

Los números enteros que obtengo son: 1,2,4,8.

Por qué cada número entero más grande para cada número es el mismo:2147483647? ¿Y hay una función intrínseca para el entero más pequeño?

¿Cómo puedo mantener el número entero cuando la subrutinarang ¿se llama? Creo que es la clave del entero más grande.