#include <bits/stdc++.h>
const int inf = 1e9 + 9;
const int N = 2e5 + 5;
using namespace std;
inline long long read() {
  long long s = 0, w = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    s = s * 10 + ch - '0';
    ch = getchar();
  }
  return s * w;
}
using namespace std;
const long double pi = acos(-1);
long long f[N][2], g[N][20], c[N], n, m;
long double st[20][N];
long double qry(int l, int r) {
  int t = c[r - l + 1];
  return min(st[t][l], st[t][r - (1 << t) + 1]);
}
bool check(long double now) {
  vector<pair<long double, long double> > tmp;
  for (int i = 1; i <= n; i++) {
    long double x = atan2(f[i][1], f[i][0]),
                y = acos(now / sqrt(f[i][0] * f[i][0] + f[i][1] * f[i][1]));
    if (x - y < -pi) x += 2 * pi;
    tmp.push_back(pair<long double, long double>(x - y, x + y));
    tmp.push_back(
        pair<long double, long double>(x - y + 2 * pi, x + y + 2 * pi));
  }
  sort(tmp.begin(), tmp.end());
  for (int i = 0; i < 2 * n; i++) st[0][i] = tmp[i].second;
  for (int i = 1; 1 << i <= 2 * n; i++)
    for (int j = 0; j + (1 << i) - 1 < 2 * n; j++)
      st[i][j] = min(st[i - 1][j], st[i - 1][j + (1 << (i - 1))]);
  g[2 * n][0] = 2 * n;
  for (int i = 0; i < 2 * n; i++) {
    int l = i, r = min(2 * n - 1, i + n - 1);
    while (l < r) {
      int mid = l + r + 1 >> 1;
      qry(i, mid) >= tmp[mid].first ? l = mid : r = mid - 1;
    }
    g[i][0] = l + 1;
  }
  for (int i = 2 * n; i >= 0; i--)
    for (int j = 1; 1 << j <= m; j++) g[i][j] = g[g[i][j - 1]][j - 1];
  for (int i = 0; i < n; i++) {
    int f = i;
    for (int j = 0; 1 << j <= m && f < n + i; j++)
      if (m >> j & 1) f = g[f][j];
    if (f >= n + i) return 1;
  }
  return 0;
}
void init() {
  n = read(), m = read();
  c[0] = -1;
  for (int i = 1; i <= 2 * n; i++) c[i] = c[i >> 1] + 1;
}
void solve() {
  long double l = 0, r = 1e9;
  for (int i = 1; i <= n; i++) {
    f[i][0] = read(), f[i][1] = read();
    r = min(r, (long double)sqrt(1.0 * f[i][0] * f[i][0] +
                                 1.0 * f[i][1] * f[i][1]));
  }
  while (r - l > 1e-8) {
    long double mid = (l + r) / 2;
    check(mid) ? l = mid : r = mid;
  }
  cout << fixed << setprecision(6) << l;
}
int main() {
  init();
  solve();
  return 0;
}
