#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-13;
const double Pi = acos(-1);
const int maxn = 1e5 + 10;
double x[maxn], y[maxn];
int dcmp(double x, double y) {
  if (abs(x - y) < eps) return 0;
  if (x > y) return 1;
  return -1;
}
vector<int> arr;
vector<array<double, 2>> ta;
vector<int> opt1[maxn << 2], opt2[maxn << 2];
int n;
double sqr(double x) { return x * x; }
double t[maxn << 2];
int e;
int bit[maxn << 2];
int lowbit(int x) { return x & -x; }
void update(int x, int val) {
  while (x <= e) {
    bit[x] += val;
    x += lowbit(x);
  }
}
int ask(int x) {
  int res = 0;
  while (x) {
    res += bit[x];
    x -= lowbit(x);
  }
  return res;
}
long long solve(double r) {
  arr.resize(0);
  ta.resize(0);
  long long sz = 0;
  for (int i = 1; i <= n; ++i) {
    if (dcmp(sqr(x[i]) + sqr(y[i]), sqr(r)) > 0)
      arr.push_back(i);
    else
      ++sz;
  }
  long long res = sz * (n - 1) - sz * (sz - 1) / 2;
  e = 0;
  for (auto u : arr) {
    double alpha, beta;
    beta = atan2(y[u], x[u]);
    if (dcmp(y[u], 0) < 0) beta += 2 * Pi;
    alpha = acos(r / sqrt(sqr(x[u]) + sqr(y[u])));
    t[++e] = beta - alpha;
    t[++e] = beta + alpha;
    ta.push_back({t[e - 1], t[e]});
  }
  for (int i = 1; i <= e; ++i) {
    if (dcmp(t[i], 0) < 0) t[i] += 2 * Pi;
    if (dcmp(t[i], 2 * Pi) >= 0) t[i] -= 2 * Pi;
  }
  sort(t + 1, t + 1 + e);
  e = unique(t + 1, t + 1 + e) - (t + 1);
  for (int i = 1; i <= e; ++i) opt1[i].resize(0), opt2[i].resize(0);
  for (auto &u : ta) {
    for (int j : {0, 1}) {
      if (dcmp(u[j], 0) < 0) u[j] += 2 * Pi;
      if (dcmp(u[j], 2 * Pi) >= 0) u[j] -= 2 * Pi;
    }
  }
  for (int i = 0; i < ta.size(); ++i) {
    auto u = ta[i];
    int x = lower_bound(t + 1, t + 1 + e, u[0]) - t;
    int y = lower_bound(t + 1, t + 1 + e, u[1]) - t;
    if (x > y) swap(x, y);
    assert(x != y);
    opt1[x].push_back(y);
  }
  memset(bit, 0, sizeof bit);
  long long tmp = 0;
  for (int i = 1; i <= e; ++i) {
    sort(opt1[i].begin(), opt1[i].end());
    for (auto u : opt1[i]) {
      tmp += ask(u) - ask(i - 1);
      update(u, 1);
    }
  }
  res += (n - sz) * (n - sz - 1) / 2 - tmp;
  return res;
}
int main() {
  long long k;
  scanf("%d%lld", &n, &k);
  double l = 0, r = 0;
  for (int i = 1; i <= n; ++i) {
    scanf("%lf%lf", &x[i], &y[i]);
    r = max(r, sqrt(sqr(x[i]) + sqr(y[i])));
  }
  int T = 40;
  while (T--) {
    double mid = (l + r) / 2;
    if (solve(mid) >= k)
      r = mid;
    else
      l = mid;
  }
  printf("%.8f\n", l);
  return 0;
}
