program main
    implicit none
    integer(4):: n,k,i
    integer(4),allocatable:: p(:)
    real(8),allocatable:: s(:)
    real(8):: ans
    read*, n, k
    allocate(p(n))
    read*, p(:)

    call merge_sort(p(:),1,n)

    allocate(s(p(1)))
    s(1) = 1d0
    do i=2, p(1)
        s(i) = s(i-1)+dble(i)
    end do

    do i=1,p(1)
        s(i) = s(i)/dble(i)
    end do


    ans = 0

    do i=1,k
        ans = ans + s(p(i))
    end do
    print*, ans

contains
recursive subroutine merge_sort(ar,fst,lst)
    integer(4):: ar(:),fst,lst
    integer(4):: tmp, mdl
    if(lst-fst < 2) then
        if (ar(fst) < ar(lst)) then
            tmp = ar(fst)
            ar(fst) = ar(lst)
            ar(lst) = tmp
        end if
        return
    end if

    mdl = (fst+lst)/2
    call merge_sort(ar(:), fst, mdl)
    call merge_sort(ar(:), mdl+1, lst)
    call merge(ar(:), fst, mdl, lst)

end subroutine

subroutine merge(ar,fst,mdl,lst)
    integer(4)::ar(:),fst,mdl,lst
    integer(4):: l,r,t
    integer(4),pointer:: tmp(:)

    allocate(tmp(lst-fst+1))
    l=fst
    r=mdl+1
    t=1
    do while(l <= mdl .and. r <= lst)
        if (ar(l) > ar(r)) then
            tmp(t) = ar(l)
            l=l+1
        else
            tmp(t) = ar(r)
            r=r+1
        end if
        t=t+1
    end do
    
    if (r > lst) then
        tmp(t:) = ar(l:mdl)
    else
        tmp(t:) = ar(r:lst)
    end if

    ar(fst:lst) = tmp(:)
    deallocate(tmp)
end subroutine
end program main