/**
 * code generated by JHelper
 * More info: https://github.com/AlexeyDmitriev/JHelper
 * @author
 */


#ifndef SOLUTION_COMMON_H

#include <bits/stdc++.h>

using namespace std;

using ll = long long;
using PI = pair<int, int>;
template<class T> using V = vector<T>;
using VI = V<int>;
#define _1 first
#define _2 second

#ifdef MY_DEBUG
# define DEBUG(x) x
#else
# define DEBUG(x)
#endif

template<class A, class B>
std::ostream & operator <<(ostream &os, const pair<A, B> &p) {
  os << "(" << p._1 << "," << p._2 << ")";
  return os;
}

template<class T>
inline void debug(T &A) {
  DEBUG(
      for (const auto &a : A) {
        cerr << a << " ";
      }
      cerr << '\n';
  )
}

template<class T, class Func>
inline void debug_with_format(T &A, Func f) {
  DEBUG(
      for (const auto &a : A) {
        cerr << f(a) << " ";
      }
      cerr << '\n';
  )
}

template<class T>
inline void debug_dim2(T &A) {
  DEBUG(
      for (const auto &as : A) {
        debug(as);
      }
  )
}

template<typename ... Args>
inline void debug(const char *format, Args const &... args) {
  DEBUG(
      fprintf(stderr, format, args ...);
      cerr << '\n';
  )
}

template<typename ... Args>
string format(const string &fmt, Args ... args) {
  size_t len = snprintf(nullptr, 0, fmt.c_str(), args ...);
  vector<char> buf(len + 1);
  snprintf(&buf[0], len + 1, fmt.c_str(), args ...);
  return string(&buf[0], &buf[0] + len);
}

template<class T1, class T2>
string fmtP(pair<T1, T2> a) {
  stringstream ss;
  ss << "(" << a._1 << "," << a._2 << ")";
  return ss.str();
}

#define SOLUTION_COMMON_H

#endif //SOLUTION_COMMON_H

const int MOD = 1000000007;

class DPairs {
public:
  void solve(std::istream& in, std::ostream& out) {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N;
    ll K;
    in >> N >> K;
    VI plus, minus;
    ll zero = 0;
    for (int i = 0; i < N; ++i) {
      int a;
      in >> a;
      if (a > 0) {
        plus.push_back(a);
      } else if (a < 0) {
        minus.push_back(a);
      } else {
        zero++;
      }
    }
    sort(plus.begin(), plus.end());
    sort(minus.begin(), minus.end());

    ll sMinus = plus.size() * minus.size();
    ll sZero = zero * (N - zero) + zero * (zero - 1) / 2;

    ll l = (ll)-1e18 - 1;
    ll h = (ll)1e18;

//    debug("%d %d", sMinus, sZero);

    auto test = [&](ll x) {
      if (x == 0) return sMinus + sZero >= K;
      if (x < 0) {
        ll cnt = 0;
        for (int a : plus) {
          ll b = x / a + 1;
          if (x % a != 0) b--;
          cnt += lower_bound(minus.begin(), minus.end(), b) - minus.begin();
        }
        return cnt >= K;
      }

      ll cnt = 0;
      for (int a : plus) {
        ll b = x / a + 1;
        cnt += lower_bound(plus.begin(), plus.end(), b) - plus.begin();
        if (a < b) cnt--;
      }
      for (int a : minus) {
        ll b = x / abs(a);
        int c = lower_bound(minus.begin(), minus.end(), -b) - minus.begin();
        cnt += minus.size() - c;
        if (abs(a) <= b) cnt--;
      }
      return cnt / 2 + sMinus + sZero >= K;
    };

    while(h - l > 1) {
      ll m = (h + l) / 2;
      if (test(m)) h = m;
      else l = m;
    }
    out << h;
  }
};


int main() {
	DPairs solver;
	std::istream& in(std::cin);
	std::ostream& out(std::cout);
	solver.solve(in, out);
	return 0;
}


Measured memory_bytes: 1400