#include <bits/stdc++.h>
using namespace std;
using ld = long double;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vi = vector<int>;
const int oo = 1e9 + 7;
const ll loo = 1e18;
ll modpow(ll a, ll b) {
  ll res = 1;
  while (b) {
    if (b & 1) res = res * a % oo;
    a = a * a % oo;
    b /= 2;
  }
  return res;
}
ll gcd(ll a, ll b) { return a == 0 ? b : gcd(b % a, a); }
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int N = 5e5 + 7;
int n, k, m;
using point = complex<ll>;
point p[N];
ld dist[N];
vector<int> arms[N];
int gr[N];
int num;
ld cross(point a, point b) { return (conj(a) * b).imag(); }
ld dot(point a, point b) { return (conj(a) * b).real(); }
void input() {
  map<pair<ll, ll>, int> id;
  m = 0;
  for (int i = 0; i < n; i++) {
    ll a, b;
    cin >> a >> b;
    p[i] = point(a, b);
    dist[i] = sqrt(dot(p[i], p[i]));
    if (a == 0 && b == 0) continue;
    ll g = gcd(abs(a), abs(b));
    pair<ll, ll> ash = make_pair(a / g, b / g);
    if (!id.count(ash)) id[ash] = m++;
    arms[id[ash]].push_back(i);
    gr[i] = id[ash];
  }
  for (int i = 0; i < m; i++) {
    sort(begin(arms[i]), end(arms[i]),
         [&](int i, int j) { return dist[i] < dist[j]; });
  }
}
ld option1() {
  priority_queue<pair<ld, int>> pq;
  for (int i = 0; i < m; i++) {
    for (int t = 0; t < min(k / 2, (int)arms[i].size()); t++) {
      ld wei = (k - 2 * t - 1) * dist[arms[i][arms[i].size() - 1 - t]];
      pq.push(make_pair(wei, arms[i][arms[i].size() - 1 - t]));
    }
  }
  for (int i = 0; i < n; i++)
    if (p[i] == point(0)) {
      pq.push(make_pair(0, i));
    }
  ld ans = 0;
  while (pq.size() && num < k) {
    auto pp = pq.top();
    pq.pop();
    ans += pp.first;
    num++;
  }
  return ans;
}
ld option2(int i, ld ans) {
  int half = k / 2;
  int s = num - half;
  for (int t = 0; t < arms[i].size() - half; t++) {
    ans += dist[arms[i][t]] * ((t + s) - (k - 1 - t - s));
    if (t + 1 + num == k) break;
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k;
  input();
  ld ans = option1();
  if (num < k) {
    ld res = 0;
    for (int i = 0; i < m; i++)
      if (2 * (n - arms[i].size()) <= k) {
        res = max(res, option2(i, ans));
      }
    ans = res;
  }
  cout << setprecision(40) << ans << endl;
  return 0;
}
