program atcoder_abc115c_sort
    implicit none
    integer(8) :: n,k,i,ans=10000000000_8
    integer(8),allocatable,dimension(:) :: a,ind
    read*,n,k
    allocate( a(n) )
    allocate( ind(n) )
    read(*,*)(a(i),i=1,n)
    do i=1,n
        ind(i) = i;
    end do
    call sort(a,ind)
    do i=1,n-k+1
        ans = min(ans,a(i+k-1)-a(i))
    enddo
    write(*,'(I0)')ans


  !----------------------functions--------------------------
  contains
  recursive subroutine mergesort(a, p, r, b,ia,ib)
  integer(8) a(:), b(:),ia(:),ib(:)
  integer(8) p, r
  integer(8) q
  if (p < r) then
    q = (p+r)/2
    call mergesort(a, p, q, b,ia,ib)
    call mergesort(a, q+1, r, b,ia,ib)
    call merge(a, p, q, r, b, ia,ib)
  end if
  end subroutine mergesort
  subroutine merge(a, p, q, r, b, ia,ib)
    integer(8) a(:), b(:),ia(:),ib(:)
    integer(8) p, r, q, i, j, k
    integer(8) t,ti
    k = p;   i = p;   j = q+1
    do
      if (.not. (k <= r)) exit
      if (j > r) then
        t = a(i);   i = i+1
        ti = ia(i)
      else if (i > q) then
        t = a(j);   j = j+1
        ti = ia(j)
      else if (a(i) <= a(j)) then
        t = a(i);   i = i+1
        ti = ia(i)
      else
        t = a(j);   j = j+1
        ti = ia(j)
      end if
      b(k) = t;   k = k+1
      ib(k) = ti

    end do
    do i = p, r
      a(i) = b(i)
      ia(i) = ib(i)
    end do
  end subroutine merge
  subroutine sort(a,ia)
    integer(8) a(:), b(size(a)),n,ia(:),ib(size(a))
    n = size(a)
    call mergesort(a,1_8,n,b,ia,ib)
  end subroutine sort
  end program atcoder_abc115c_sort