#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iomanip>

using namespace std;

int N;
long long int K;
long long int A[200005];

long long int Nm, Nn, Np;
long long int m, n, p;

vector<long long int >Vm, Vp, Vmc, Vpc, Vh, Vh0, Vp0;;

long long int CALC(long long int W) {

	if (W < 0) {
		long long int num = 0;
		for (auto y : Vh) {
			long long int tmp = ((-W) + y - 1) / y; //cout << "tmp= " << tmp << endl;
			int pos = lower_bound(Vp.begin(), Vp.end(), tmp) - Vp.begin(); //cout << "pos = " << pos << endl;
			//cout << "Vp.size()= " << Vp.size() << endl;
			num += Vp.size() - pos; //cout << "num= " << num << endl;
		}
		return num;
	}
	else if (W == 0) { return Nm + Nn; }
	else {
		long long int ret = 0;
		// ==== m ====//
		long long int num_m = 0;
		for (auto y : Vh) {   if (y*y <= W) { num_m++; }   } //cout << "  num_m= " << num_m << endl;
		long long int num1 = 0;
		for (auto y : Vh) {
			long long int tmp = W / y;
			long long int pos = lower_bound(Vh0.begin(), Vh0.end(), tmp+1) - Vh0.begin()-1;
			num1 += pos;
		}
		ret = (num1 - num_m) / 2;  //cout << "ret= " << ret << endl;
		//==== p ====//
		long long int num_p = 0; 
		for (auto y : Vp) { if (y*y <= W) { num_p++; } } //cout << "num_p= " << num_p << endl;
		long long int num2 = 0;
		for (auto y : Vp) {
			long long int tmp = W / y;
			long long int pos = lower_bound(Vp0.begin(), Vp0.end(), tmp+1) - Vp0.begin()-1; //cout << "pos= " << pos << endl;
			num2 += pos; //cout << "num2 = " << num2 << endl;
		}
		ret += (num2 - num_p) / 2 ;

			return ret+Nn+Nm;
	}

	return -99999;
}

long long int IsPossible(long long int W, long long int k) {
	if (CALC(W) >= k) { return 1; }

	return 0;
}

long long int INF = INT64_MAX / 2;

long long int BS(void) {
	long long right = INF;
	long long int left = -INF;

	while (right - left > 1) {
		long long int tmp = (right + left) / 2;
		if (IsPossible(tmp, K)) { right = tmp; }
		else { left = tmp; }
	}

	return right;
}

int main(void) {


	/*Vh0.push_back(0);
	for (int i = 1; i <= 5; i++) {
		Vh.push_back(i);
		Vh0.push_back(i);
	};

	for (int i = 1; i <= 9; i++) {
		cout <<i<<" " << CALC(i) << endl;
	}
	return 0;*/


	cin >> N >> K;
	for (int i = 1; i <= N; i++) {
		cin >> A[i];
		if (A[i] == 0) { n++; }
		else if (A[i] > 0) { p++;  Vp.push_back(A[i]); }
		else { m++; Vm.push_back(A[i]); Vh.push_back(-A[i]); }
	}

	Nm = m*p;
	Nn = (n*(n - 1)) / 2 + (N-n)*n;
	Np = (m*(m - 1)) / 2 + (p*(p - 1)) / 2;

	/*cout << "Nm= " << Nm << endl;
	cout << "Nn= " << Nn << endl;
	cout << "Np= " << Np << endl;
	cout << Nm + Nn + Np << endl;*/

	sort(Vm.begin(), Vm.end());
	sort(Vp.begin(), Vp.end());
	sort(Vh.begin(), Vh.end());

	Vmc = Vm;
	Vpc = Vp;

	Vh0 = Vh;
	Vh0.push_back(0);
	sort(Vh0.begin(), Vh0.end());

	Vp0 = Vp;
	Vp0.push_back(0);
	sort(Vp0.begin(), Vp0.end());


	/*vector<long long int> ans;
	for (int i = 1; i <= N; i++) {
		for (int j = i + 1; j <= N; j++) {
			ans.push_back(A[i] * A[j]);
		}
	}
	sort(ans.begin(), ans.end());*/

/*	int p = 1;
	for (auto y : ans) {
		cout << p << " " << y <<  " " <<CALC(y)<<   endl; p++;
	}*/

	/*for (int i = -15; i <= 0; i++) {
		cout << i << " " << CALC(i) << "  IsPossible= " << IsPossible(i,K) << endl;
	}*/


	//cout << CALC(-7) << endl;

	

	cout << BS() << endl;


	

	return 0;
}

Measured memory_bytes: 8804