#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<limits.h>
typedef long long LL;
#define rep(i,N) for(int i=0;i<(LL)N;i++)
int compare(const LL*a,const LL*b){if(*a<*b)return -1;else if(*a==*b)return 0;else return 1;}
signed main(void)
{
  int NG,OK,BASE,minus;
  LL N,K,L=-pow(16,16)/16,M,R=LLONG_MAX/3,count;
  count=scanf("%lld %lld",&N,&K);
  LL A[N];
  rep(i,N)count=scanf("%lld",&A[i]);
  qsort(A,N,sizeof(LL),(int(*)(const void*,const void*))compare);
  while(R-L>1)
  {
    M=(L+R)/2,count=0;
    rep(i,N)
    {
      NG=i,OK=N,minus=(A[i]<0);
      while(OK-NG>1)
      {
        BASE=(NG+OK)/2;
        if(A[i]*A[BASE]<=M){if(minus)OK=BASE;else NG=BASE;}
        else{if(minus)NG=BASE;else OK=BASE;}
      }
      count+=(minus)?N-OK:NG-i;
    }
    if(count<K)L=M;else R=M;
  }
  return printf("%lld\n",R),0;
}