#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
int n, x[maxn], y[maxn];
const double eps = 1e-8;
const double pi = acos(-1.0);
inline double sqr(double x) { return x * x; }
inline void norm(double &x) {
  while (x < 0) x += pi * 2;
  while (x > pi * 2) x -= pi * 2;
}
unordered_map<double, int> Map;
pair<double, double> A[maxn];
double B[maxn << 1];
int t[maxn << 1];
inline int lowbit(int x) { return x & (-x); }
inline void update(int x) {
  for (int i = x; i <= n * 2; i += lowbit(i)) t[i]++;
}
inline int query(int x) {
  int res = 0;
  for (int i = x; i >= 1; i -= lowbit(i)) res += t[i];
  return res;
}
long long K;
int main() {
  scanf("%d%lld", &n, &K);
  for (int i = 1; i <= n; i++) scanf("%d%d", &x[i], &y[i]);
  double l = 0, r = 2e4;
  long long all = 1ll * n * (n - 1) / 2;
  while (r - l > eps) {
    double mid = (l + r) * 0.5;
    int tot = 0, N = 0;
    for (int i = 1; i <= n; i++) {
      double dis = sqrt(sqr(x[i]) + sqr(y[i]));
      if (dis < mid) continue;
      double theta = atan2(y[i], x[i]);
      double theta1 = theta - acos(mid / dis);
      double theta2 = theta + acos(mid / dis);
      norm(theta1), norm(theta2);
      if (theta1 > theta2) swap(theta1, theta2);
      A[++tot] = make_pair(theta1, theta2);
      B[++N] = theta1, B[++N] = theta2;
    }
    sort(B + 1, B + N + 1);
    N = unique(B + 1, B + N + 1) - (B + 1);
    Map.clear();
    for (int i = 1; i <= N; i++) Map[B[i]] = i;
    sort(A + 1, A + tot + 1);
    memset(t, 0, sizeof(t));
    long long res = 0;
    for (int i = 1; i <= tot; i++) {
      int l = Map[A[i].first], r = Map[A[i].second];
      res += query(r - 1) - query(l - 1);
      update(r);
    }
    (all - res >= K) ? r = mid : l = mid;
  }
  cout << fixed << setprecision(10) << l << endl;
  return 0;
}
