#include <bits/stdc++.h>
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
int n, m, ext[100000][20];
pair<long long, long long> p[100000];
long double distoc[100000];
int minreq(long double dis) {
  vector<pair<long double, long double>> v1;
  for (int i = 0; i < (n); i++) {
    pair<long double, long double> toadd;
    long double ang = acos(dis / distoc[i]);
    toadd.second = 2 * ang;
    toadd.first = atan2(p[i].second, p[i].first) - ang;
    if (toadd.first < 0) toadd.first += 2 * acos(-1);
    v1.push_back(toadd);
  }
  sort((v1).begin(), (v1).end());
  vector<pair<long double, long double>> v;
  for (const pair<long double, long double> pnt : v1) {
    while (!v.empty() &&
           pnt.first + pnt.second <= v.back().first + v.back().second)
      v.pop_back();
    v.push_back(pnt);
  }
  while (2 * acos(-1) + v[0].first + v[0].second <
         v.back().first + v.back().second)
    v.pop_back();
  for (int i = 0; i < (((int)(v).size()) - 1); i++)
    assert(v[i].first + v[i].second < v[i + 1].first + v[i + 1].second);
  for (int i = 0; i < (((int)(v).size())); i++) {
    long double x = v[i].first + v[i].second;
    if (x > 2 * acos(-1)) x -= 2 * acos(-1);
    int j = upper_bound((v).begin(), (v).end(), make_pair(x, (long double)0)) -
            v.begin();
    ext[i][0] = (j + ((int)(v).size()) - i) % ((int)(v).size());
    if (ext[i][0] == 0) return 1;
  }
  for (int j = (1); j < (20); j++)
    for (int i = 0; i < (((int)(v).size())); i++)
      ext[i][j] = min(
          ext[i][j - 1] + ext[(i + ext[i][j - 1]) % ((int)(v).size())][j - 1],
          ((int)(v).size()));
  int mn = INT_MAX;
  for (int i = 0; i < (((int)(v).size())); i++) {
    int curr = i, amt = 0;
    int res = 0;
    for (int j = (20) - 1; j >= 0; j--)
      if (amt + ext[curr][j] < ((int)(v).size())) {
        amt += ext[curr][j];
        curr = (curr + ext[curr][j]) % ((int)(v).size());
        res += 1 << j;
      }
    mn = min(mn, res + 1);
  }
  return mn;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 0; i < (n); i++) {
    cin >> p[i].first >> p[i].second;
    distoc[i] = sqrt((((long double)p[i].first) * ((long double)p[i].first)) +
                     (((long double)p[i].second) * ((long double)p[i].second)));
  }
  long double lo = 0, hi = 1e18;
  for (int i = 0; i < (n); i++) hi = min(hi, distoc[i]);
  while (hi - lo > 1e-6) {
    long double mid = (lo + hi) / 2;
    if (minreq(mid) <= m)
      lo = mid;
    else
      hi = mid;
  }
  cout << fixed << setprecision(12) << (lo + hi) / 2 << endl;
}
