#include "bits/stdc++.h"
#define rep(i,n) for (int i = 0; i < (n); ++i)
using namespace std;
using ll = long long;
using P = pair<int, int>;

const double eps = 1e-9;
bool equal(double a, double b) { return abs(a - b) < eps; }

struct V {
	double x, y;
	V(double x = 0, double y = 0) : x(x), y(y) {}
	V operator+(const V& p) const { return V(x + p.x, y + p.y); }
	V operator-(const V& p) const { return V(x - p.x, y - p.y); }
	V operator*(double a) const { return V(x*a, y*a); }
	double sqrNorm() const { return x * x + y * y; }
	double norm() const { return sqrt(sqrNorm()); }
	V rotate90() const { return V(y, -x); }
};

struct Circle {
	V o; double r;
	Circle(V o = V(), double r = 0) : o(o), r(r) {}
	vector<V> xp(const Circle& c) {
		V v = c.o - o;
		double l = v.norm();
		if (equal(l, 0)) return {};
		if (equal(l + r + c.r, max({ l,r,c.r }) * 2)) {
			return { o + v * (r / l) };
		}
		if (l + r + c.r < max({ l,r,c.r }) * 2) return {};
		double x = -(c.r*c.r - l * l - r * r) / (2 * l);
		double y = sqrt(r*r - x * x);
		V mid = o + v * (x / l);
		v = v.rotate90();
		return { mid + v * (y / l), mid - v * (y / l) };
	}
	bool isInside(const V& p) {
		return (p - o).norm() < r + eps;
	}
};

int main() {
	int N,K;
	cin >> N>> K;
	if (K == 1) {
		cout << 0 << endl;
		return 0;
	}
	vector<Circle> c(N);
	for (int i = 0; i < N;++i) {
		cin >> c[i].o.x >> c[i].o.y >> c[i].r;
	}
	double l = 0, r = 400000;
	for (int ti = 0;ti<100;++ti) {
		double x = (l + r) / 2;
		vector<V>ps;
		//候補点を入れる
		for (int i = 0;i < N;++i) {
			ps.push_back(c[i].o);
		}
		for (int i = 0;i<N;++i) {
			for (int j = 0;j<i;++j) {
				Circle a = c[i], b = c[j];
				a.r = x / a.r;
				b.r = x / b.r;
				auto tmp = a.xp(b); 
				ps.insert(ps.end(), tmp.begin(), tmp.end());
			}
		}
		bool ok = false;
		for (V p : ps) {
			int cnt = 0;
			for (int ci = 0; ci < N;++ci) {
				Circle nc = c[ci];
				nc.r = x / nc.r;
				if (nc.isInside(p)) cnt++;
			}
			if (cnt >= K) ok = true;
		}
		if (ok) r = x; else l = x;
	}
	printf("%.10f\n", r);
	return 0;
}