import std.stdio;
import std.algorithm;

long countLess(const(long)[] a, long x) {
	long count;

	foreach (e;a) {
		if (e >= 0) {
			long ng = -1, ok = cast(long)a.length;

			while (ok - ng > 1) {
				auto middle = (ok + ng) / 2;

				if (e * a[middle] >= x) {
					ok = middle;
				} else {
					ng = middle;
				}
			}
			count += ok;
		} else {
			long ng = -1, ok = cast(long)a.length;

			while (ok - ng > 1) {
				auto middle = (ok + ng) / 2;
				if (e * a[middle] < x) {
					ok = middle;
				} else {
					ng = middle;
				}
			}
			count += cast(long)a.length - ok;
		}

		if (e * e < x) {
			--count;
		}
	}

	return count / 2;
}

void main() {
	long n, k;
	readf(" %s %s", &n, &k);
	auto a = new long[n];
	foreach (ref e;a) {
		readf(" %s", &e);
	}

	sort(a);

	long ok = long.min / 2 + 1, ng = long.max / 2;

	while (ng - ok > 1) {
		auto middle = (ok + ng) / 2;
		auto count = countLess(a, middle);

		if (count < k) {
			ok = middle;
		} else {
			ng = middle;
		}
	}

	writeln(ok);
}
