#include <bits/stdc++.h>
using namespace std;
const long long maxn = 2e5 + 10;
const double eps = 1e-12;
const double pi = acos(-1);
long long n, k, c[maxn];
pair<long long, long long> a[maxn];
vector<pair<double, double> > p;
vector<pair<long long, long long> > q;
map<double, long long> Map;
inline long long lowbit(long long first) { return first & -first; }
inline void add(long long pos, long long val) {
  for (long long i = pos; i < maxn; i += lowbit(i)) c[i] += val;
}
inline long long get(long long pos) {
  long long sum = 0;
  for (long long i = pos; i > 0; i -= lowbit(i)) sum += c[i];
  return sum;
}
inline bool InCircle(pair<long long, long long> first, double r) {
  if (first.first * first.first + first.second * first.second <= r * r + eps)
    return true;
  return false;
}
inline pair<double, double> Get(pair<long long, long long> first, double r) {
  double theta = atan(first.second * 1.0 / first.first);
  if (first.first < 0) theta += pi;
  double alpha = acos(r / sqrt((double)first.first * first.first +
                               first.second * first.second));
  double a1 = theta + alpha, a2 = theta - alpha;
  while (a1 < 0) a1 += 2 * pi;
  while (a1 > 2 * pi) a1 -= 2 * pi;
  while (a2 < 0) a2 += 2 * pi;
  while (a2 > 2 * pi) a2 -= 2 * pi;
  Map[a1] = Map[a2] = -1;
  return pair<double, double>(min(a1, a2), max(a1, a2));
}
inline bool Check(double Mid) {
  long long num = k;
  p.clear();
  q.clear();
  Map.clear();
  memset((c), 0, sizeof(c));
  for (long long i = (1), _end_ = (n); i <= _end_; ++i) {
    if (InCircle(a[i], Mid)) continue;
    p.push_back(Get(a[i], Mid));
  }
  long long m = 0;
  for (auto it : Map) Map[it.first] = ++m;
  for (auto it : p)
    q.push_back(pair<long long, long long>(Map[it.first], Map[it.second]));
  sort(q.begin(), q.end());
  for (long long i = 0; i < q.size(); ++i) {
    num -= get(q[i].second) - get(q[i].first - 1);
    add(q[i].second, 1);
  }
  return num >= 0;
}
signed main() {
  scanf("%lld%lld", &n, &k);
  k = n * (n - 1) / 2 - k;
  for (long long i = (1), _end_ = (n); i <= _end_; ++i)
    scanf("%lld%lld", &a[i].first, &a[i].second);
  double L = 0, R = 20000;
  for (long long o = (0), _end_ = (40); o <= _end_; ++o) {
    double Mid = (L + R) / 2;
    if (Check(Mid))
      R = Mid;
    else
      L = Mid;
  }
  printf("%.6lf\n", (L + R) / 2);
  return 0;
}
