Fortran: o maior e o menor número inteiro

Fortran é completamente novo para mim, alguém pode me ajudar a resolver o problema que se segue? Quero descobrir todos os números inteiros do tipo e o maior e menor valor para cada número do tipo no meu pc. Eu tenho o código listado abaixo:

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 

Os números inteiros do tipo que recebo são: 1,2,4,8.

Por que cada número inteiro maior para cada número de tipo é o mesmo:2147483647? E existe uma função intrínseca para o menor número inteiro?

Como posso manter o número inteiro do tipo quando a sub-rotinarang é chamado? Eu acho que é a chave para o maior número inteir

questionAnswers(4)

yourAnswerToTheQuestion