#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 7, N = 1e5 + 7;
const double eps = 1e-9, TT = acos(-1);
bool same(double a, double b) { return abs(a - b) < eps; }
struct P {
  double x, y;
  P(double _x = 0, double _y = 0) { x = _x, y = _y; }
  P operator+(P b) { return P(x + b.x, y + b.y); }
  P operator-(P b) { return P(x - b.x, y - b.y); }
  double operator*(P b) { return x * b.x + y * b.y; }
  double operator^(P b) { return x * b.y - y * b.x; }
  P operator*(double b) { return P(x * b, y * b); }
  P operator/(double b) { return P(x / b, y / b); }
  double abs() { return hypot(x, y); }
  P unit() { return *this / abs(); }
  P rotate(double o) {
    double c = cos(o), s = sin(o);
    return P(c * x - s * y, s * x + c * y);
  }
  double angle() { return atan2(y, x); }
};
P a[N];
struct BIT {
  vector<int> bit;
  int n;
  BIT(int _n) {
    n = _n;
    bit = vector<int>(n + 1);
  }
  void add(int pos, int val = 1) {
    for (; pos <= n; pos += pos & -pos) bit[pos] += val;
  }
  int qry(int pos) {
    int res = 0;
    for (; pos; pos -= pos & -pos) res += bit[pos];
    return res;
  }
};
signed main() {
  std::ios::sync_with_stdio(0);
  std::cin.tie(0);
  ;
  long long n, k;
  cin >> n >> k;
  for (int i = 0; i < n; i++) cin >> a[i].x >> a[i].y;
  auto num_bigger = [&](double r) -> long long {
    long long ans = 0;
    vector<double> compress;
    vector<pair<double, double>> segs;
    for (int i = 0; i < n; i++) {
      if (a[i].abs() <= r) continue;
      double center = a[i].angle();
      double delta = acos(r / a[i].abs());
      double x = center - delta, y = center + delta;
      if (x <= -TT) x += 2 * TT;
      if (x > TT) x -= 2 * TT;
      if (y <= -TT) y += 2 * TT;
      if (y > TT) y -= 2 * TT;
      if (x > y) swap(x, y);
      compress.push_back(x), compress.push_back(y);
      segs.emplace_back(x, y);
    }
    sort((compress).begin(), (compress).end());
    sort((segs).begin(), (segs).end());
    BIT bit(compress.size() + 1);
    for (auto seg : segs) {
      int l = lower_bound((compress).begin(), (compress).end(), seg.first) -
              compress.begin() + 1,
          r = lower_bound((compress).begin(), (compress).end(), seg.second) -
              compress.begin() + 1;
      ans += bit.qry(r) - bit.qry(l);
      bit.add(r, 1);
    }
    return ans;
  };
  auto num_smaller = [&](double r) -> long long {
    return n * (n - 1) / 2 - num_bigger(r);
  };
  double lb = 0, rb = 1e5;
  for (int i = 0; i < 60; i++) {
    double mb = (lb + rb) / 2;
    if (num_smaller(mb) >= k)
      rb = mb;
    else
      lb = mb;
  }
  cout << fixed << setprecision(10) << lb << endl;
}
