#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-11;
template <class T>
inline void ckmin(T& a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void ckmax(T& a, T b) {
  if (b > a) a = b;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
using VI = vector<int>;
double ck(double p) {
  p = fmod(p, pi * 2);
  if (p < 0) p += pi * 2;
  return p;
}
bool solve(const VI& x, const VI& y, double r, int m) {
  int n = ((int)x.size());
  vector<double> s(n), t(n), w(n);
  for (int i = 0; i < (n); ++i) {
    double d = sqrt(sqr((double)x[i]) + sqr((double)y[i]));
    double p = atan2((double)y[i], (double)x[i]);
    double dp = acos(r / d);
    s[i] = ck(p - dp);
    t[i] = ck(p + dp);
    w[i] = dp * 2;
  }
  vector<pair<double, int>> pts(n + n);
  for (int i = 0; i < (n); ++i)
    pts[i] = make_pair(s[i], i), pts[i + n] = make_pair(t[i], i + n);
  sort(pts.begin(), pts.end());
  VI sg(n), tg(n);
  for (int i = 0; i < (n + n); ++i)
    if (pts[i].second < n)
      sg[pts[i].second] = i;
    else
      tg[pts[i].second - n] = i;
  for (int i = 0; i < (n); ++i)
    if (sg[i] > tg[i]) tg[i] += n * 2;
  VI other(n * 4, -1);
  for (int i = 0; i < (n); ++i) {
    other[sg[i]] = tg[i];
    other[sg[i] + n * 2] = tg[i] + n * 2;
  }
  VI next(n * 4);
  int minp = n * 4;
  for (int i = n * 2; i < n * 4; i++)
    if (other[i] >= 0) ckmin(minp, other[i]);
  for (int i = n * 2 - 1; i >= 0; i--) {
    next[i] = minp;
    if (other[i] >= 0) ckmin(minp, other[i]);
  }
  for (int i = 0; i < (n * 2); ++i) next[i + n * 2] = next[i] + n * 2;
  VI f[20];
  f[0] = next;
  for (int k = (1); k < (20); ++k) {
    f[k] = VI(n * 4);
    for (int i = 0; i < (n * 4); ++i) {
      int t = f[k - 1][i];
      f[k][i] = (t >= n * 4 ? n * 4 : f[k - 1][t]);
    }
  }
  for (int s = 0; s < (n * 2); ++s) {
    int p = s;
    for (int k = 0; k < (20); ++k)
      if ((((m) & (1 << (k))) != 0)) {
        p = f[k][p];
        if (p >= s + n * 2) break;
      }
    if (p >= s + n * 2) return true;
  }
  return false;
}
int main() {
  std::ios::sync_with_stdio(false);
  int n, m;
  while (cin >> n >> m) {
    set<pair<int, int>> p;
    double low = 0;
    double high = 1e100;
    for (int i = 0; i < (n); ++i) {
      int x, y;
      cin >> x >> y;
      p.insert(make_pair(x, y));
      ckmin(high, sqrt(sqr((double)x) + sqr((double)y)));
    }
    double ret = 0;
    if (p.count(make_pair(0, 0)))
      ret = 0;
    else {
      VI x, y;
      for (auto w : p) x.push_back(w.first), y.push_back(w.second);
      for (int step = 0; step < (60); ++step) {
        double mid = (low + high) / 2;
        if (solve(x, y, mid, m))
          low = mid;
        else
          high = mid;
      }
      ret = low;
    }
    printf("%.18lf\n", ret);
    break;
  }
  return 0;
}
