program ARC086C
    implicit none
    integer(8)::N,K,valiation,i
    integer(8)::remove=0
    integer(8)::result=0
    integer(8),allocatable,dimension(:)::A,L
    read(5,*)N,K
    allocate(A(N))
    allocate(L(N))
    valiation=N
    L=0
    read(5,*)(A(i),i=1,N)

    do i=1,N
        L(A(i))=L(A(i))+1
    end do

    L=iqsort(L)

    do i=1,N
        if(L(i)==0)then
            valiation=valiation-1
        else
            exit
        end if
    end do

    remove=valiation-K

    if(remove>0)then
        do i=1,N
            if(L(i)/=0)then
                result=result+L(i)
                remove=remove-1
            end if

            if(remove==0)then
                exit
            end if
        end do
    end if

    print'(i0)',result

contains
    recursive function iqsort(ix) result(ires)
      integer(8), allocatable :: ires(:)
      integer(8), intent(in)  :: ix(:)
      integer :: k
      if (size(ix) <= 1) then 
        ires = ix
      else  
        k = ix(size(ix) / 2)
        ires = [iqsort(pack(ix, ix < k)), pack(ix, ix == k), iqsort(pack(ix, ix > k))] 
      end if
    end function iqsort
end program ARC086C