#include"bits/stdc++.h"
using namespace std;

#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define rep3(i,m,n) for(int (i)=m;(i)<=(n);(i)++)
#define rep3rev(i,m,n) for(int (i)=m;(i)>=(n);(i)--)
#define all(a) (a.begin()),(a.end())
#define rall(a) (a.rbegin()),(a.rend())
#define fi first
#define se second

typedef long long ll;
typedef vector<ll> vll;
typedef vector<int> vi;
typedef vector<vector<int>> vvi;
typedef pair<int, int> pii;

const ll INF = (ll)1e18 + 5;

void Main(){
	ll n, k;
  	cin >> n >> k;
  	vll a(n);
	vll vp, vn, vz, v;
  	rep(i,n){
    	cin >> a[i];
      	if(a[i]>0) {
          	vp.emplace_back(a[i]);
        	//v.emplace_back(a[i]);
        }else if(a[i]<0) {
          	vn.emplace_back(-a[i]);
          	//v.emplace_back(-a[i]);
        }else vz.emplace_back(a[i]);
    }
  	ll sp = vp.size();
  	ll sz = vz.size();
  	ll sn = vn.size();
	
  	ll np = (sp*(sp-1) + sn*(sn-1))/2;
  	ll nz = sz*(sz-1)/2 + sz*(sp+sn);
  	ll nn = sp*sn;
	sort(all(vp));
 	sort(all(vn));
    /*
      	for(auto p:vp) cout << p << " ";
      	cout << endl;
      	for(auto p:vn) cout << p << " ";
      	cout << endl;
    //*/

	if(k <= nn){ 
      	// negative: 上から k 番目を求めて -1 倍したものを出力
      	auto pro = [&](ll a, ll b){
      		return vn[a]*vp[b];  	
        };
      
		auto f = [&](ll x){
          	// vn * vp のテーブル上で product が x 以上になるペアの個数を数える
			ll l, r, m, res;
          	res = 0;
          	rep(i,sn){
          		l = 0;
          		r = sp-1;
              	if(pro(i,l)>=x) {
                  	r = sp;
                	// cout << i << ": case1" << endl;
                }else if(pro(i,r)<x) {
                  	r = 0;
                	// cout << i << ": case2" << endl;
                }
				else{
                	while(l+1 != r){
                    	m = (l+r)/2;
                      	if(pro(i,m)>=x) r = m;
                      	else l = m;
                    }
                  	r = sp-r;
            	}
              	res += r;
              	// cout << i << ": " << res << endl;
            }
          	return res;
        };
		
      	//rep(i,13) cout << "f(" << i << ") = " << f(i) << endl;

      	//*
      	// f は単調減少
      	// 上から k 番目が欲しい
      	// f(x+1) < k, f(x) >= k なら -x を出力

      	ll L = 1, R = INF, M, ans;
      	if(f(L) < k) ans = 0;
		else{
          	while(L+1!=R){
        		M = (L+R)/2;
          		if(f(M) < k) R = M;
          		else L = M;
        	}
        	ans = L;
        }
      	cout << -ans << endl;
        //*/
      	return;  	
    }else if( nn < k && k <= nn + nz ){ 
      	// zero
    	cout << 0 << endl;
      	return;
    }else{ 
      	// positive: 下から k-(nn+nz) 番目を求めて -1 倍したものを出力
		//sort(all(v));
      	//ll sv = sp + sn;
      	      	
      	auto prop = [&](ll a, ll b){
          	return vp[a]*vp[b];  	
        };
      	auto pron = [&](ll a, ll b){
          	return vn[a]*vn[b];  	
        };
      
		auto fp = [&](ll x){
          	// vp * vp のテーブル上で product が x 以上になるペアの個数を数える
			ll l, r, m, res;
          	res = 0;
          	rep(i,sp-1){
          		l = i+1;
          		r = sp-1;
              	if(l==r){
                	if(prop(i,l)>=x) r = 1;
                  	else r = 0;
                  	//cout << i << ": case0, r = " << r << endl;
                  	//cout << i << "," << l << "," << prop(i,l) << endl; 
                }
              	else if(prop(i,l)>=x) {
                  	r = sp - (i+1);
                	//cout << i << ": case1" << endl;
                }else if(prop(i,r)<x) {
                  	r = 0;
                	//cout << i << ": case2" << endl;
                }
				else{
                	while(l+1 != r){
                    	m = (l+r)/2;
                      	if(prop(i,m)>=x) r = m;
                      	else l = m;
                    }
                  	r = sp-r;
            	}
              	res += r;
              	//cout << i << ": " << res << endl;
            }
          	return res;
        };

      	auto fn = [&](ll x){
          	// vn * vn のテーブル上で product が x 以上になるペアの個数を数える
			ll l, r, m, res;
          	res = 0;
          	rep(i,sn-1){
          		l = i+1;
          		r = sn-1;
                if(l==r){
                	if(pron(i,l)>=x) r = 1;
                  	else r = 0;
                }
              	else if(pron(i,l)>=x) {
                  	r = sn - (i+1);
                	// cout << i << ": case1" << endl;
                }else if(pron(i,r)<x) {
                  	r = 0;
                	// cout << i << ": case2" << endl;
                }
				else{
                	while(l+1 != r){
                    	m = (l+r)/2;
                      	if(pron(i,m)>=x) r = m;
                      	else l = m;
                    }
                  	r = sn-r;
            	}
              	res += r;
              	// cout << i << ": " << res << endl;
            }
          	return res;
        };


      	/*
      	for(auto p:v) cout << p << " ";
      	cout << endl;
      	//*/
 		
      	//rep(i,25) cout << "f(" << i << ") = " << fp(i) << endl;

      	// f は単調減少
      	// k -= (nn+nz) として
      	// f(x+1) < k, f(x) >= k なら x を出力
		
      	//*
      	k -= (nn+nz);
      	k = np - k + 1;
      	//cout << "k = " << k << endl;
      	ll L = 1, R = INF, M, ans;
      	if(fp(L)+fn(L) < k) ans = 0;
		else{
          	while(L+1!=R){
        		M = (L+R)/2;
          		if(fp(M)+fn(M) < k) R = M;
          		else L = M;
        	}
        	ans = L;
        }
      	cout << ans << endl;
        //*/
      	return;  	
    }
  	
	return;
}

int main(){
	cin.tie(nullptr);
	ios_base::sync_with_stdio(false);
	cout << fixed << setprecision(15);
	Main();
	return 0;
}

Measured memory_bytes: 4084