#include <bits/stdc++.h>
 
using namespace std;
 
#define DEBUG(x) cerr<<#x<<": "<<x<<endl;
#define DEBUG_VEC(v) cerr<<#v<<":";for(int i=0;i<v.size();i++) cerr<<" "<<v[i]; cerr<<endl;
#define DEBUG_MAT(v) cerr<<#v<<endl;for(int i=0;i<v.size();i++){for(int j=0;j<v[i].size();j++) {cerr<<v[i][j]<<" ";}cerr<<endl;}
typedef long long ll;
// #define int ll
 
#define vi vector<int>
#define vl vector<ll>
#define vii vector< vector<int> >
#define vll vector< vector<ll> >
#define vs vector<string>
#define pii pair<int,int>
#define pis pair<int,string>
#define psi pair<string,int>
#define pll pair<ll,ll>
template<class S, class T> pair<S, T> operator+(const pair<S, T> &s, const pair<S, T> &t) { return pair<S, T>(s.first + t.first, s.second + t.second); }
template<class S, class T> pair<S, T> operator-(const pair<S, T> &s, const pair<S, T> &t) { return pair<S, T>(s.first - t.first, s.second - t.second); }
template<class S, class T> ostream& operator<<(ostream& os, pair<S, T> p) { os << "(" << p.first << ", " << p.second << ")"; return os; }
#define X first
#define Y second
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define rep1(i,n) for(int i=1;i<=(int)(n);i++)
#define rrep(i,n) for(int i=(int)(n)-1;i>=0;i--)
#define rrep1(i,n) for(int i=(int)(n);i>0;i--)
#define REP(i,a,b) for(int i=a;i<b;i++)
#define in(x, a, b) (a <= x && x < b)
#define all(c) c.begin(),c.end()
template<class T> bool chmax(T &a, const T &b) { if (a<b) { a = b; return 1; } return 0; }
template<class T> bool chmin(T &a, const T &b) { if (a>b) { a = b; return 1; } return 0; }
#define UNIQUE(v) v.erase(std::unique(v.begin(), v.end()), v.end());
const ll inf = 1000000001;
const ll INF = (ll)1e18 + 1;
const long double pi = 3.1415926535897932384626433832795028841971L;
#define Sp(p) cout<<setprecision(25)<< fixed<<p<<endl;
// int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
// int dx2[8] = { 1,1,0,-1,-1,-1,0,1 }, dy2[8] = { 0,1,1,1,0,-1,-1,-1 };
vi dx = {1, 0, -1, 0}, dy = {0, 1, 0, -1};
// vi dx2 = { 1,1,0,-1,-1,-1,0,1 }, dy2 = { 0,1,1,1,0,-1,-1,-1 };
#define fio() cin.tie(0); ios::sync_with_stdio(false);
const ll MOD = 1000000007;
// const ll MOD = 998244353;
// #define mp make_pair
//#define endl '\n'


#define P complex<long double>

// ���e����덷��
#define EPS (1e-8)

// https://poporix.hatenablog.com/entry/2020/03/03/223631
vector<P> intersection_circle(P c1, P c2, long double r1, long double r2) {
	long double d = abs(c1 - c2);
	if (d > r1 + r2) {
		return vector<P>(0);
	}
	long double cos_theta = (r2 * r2 - r1 * r1 - d * d) / (-2 * r1 * d);
	cos_theta = max((long double)-1., min((long double)1., cos_theta));
	long double sin_theta = sqrtl(1 - cos_theta * cos_theta);
	P e = (c2 - c1) / d * r1;

	vector<P> res;
	P temp;
	temp.real(e.real() * cos_theta - e.imag() * sin_theta);
	temp.imag(e.real() * sin_theta + e.imag() * cos_theta);
	res.push_back(temp + c1);
	if (abs(sin_theta) > EPS) {
		temp.real(e.real() * cos_theta + e.imag() * sin_theta);
		temp.imag(-e.real() * sin_theta + e.imag() * cos_theta);
		res.push_back(temp + c1);
	}
	return res;
}


signed main() {
    fio();
    int n, k;
    cin >> n >> k;
    vi x(n), y(n), c(n);
    vector<P> xy(n);
    rep (i, n) {
        cin >> x[i] >> y[i] >> c[i];
        xy[i] = P(x[i], y[i]);
    }
    if (n == 1) {
        cout << 0 << endl;
        return 0;
    }
    // auto res = intersection_circle(xy[0], xy[2], 2.4 / 3, 2.4 / 2);
    // DEBUG_VEC(res);
    // return 0;

    long double ans = inf;
    double ng = 0, ok = 1e7;
    rep (_, 200) {
        double mid = (ng + ok) / 2;
        vector<P> kouho;
        rep (i, n) kouho.push_back(xy[i]);
        rep (i, n) {
            REP (j, i + 1, n) {
                long double r1 = mid / c[i], r2 = mid / c[j];
                vector<P> inter = intersection_circle(xy[i], xy[j], r1, r2);
                for (P cent: inter) {
                    kouho.push_back(cent);
                }
            }
        }

        int max_cnt = 0;
        for (P cent: kouho) {        
            // DEBUG(cent);
            int cnt = 0;
            rep (i, n) {
                if (c[i] * abs(cent - xy[i]) <= mid + EPS) cnt++;
            }
            // DEBUG(cnt);
            chmax(max_cnt, cnt);
        }
        if (max_cnt >= k) ok = mid;
        else ng = mid;
    }

    Sp(ok);
}

// signed main() {
//     fio();
//     int n, k;
//     cin >> n >> k;
//     vi x(n), y(n), c(n);
//     vector<P> xy(n);
//     rep (i, n) {
//         cin >> x[i] >> y[i] >> c[i];
//         xy[i] = P(x[i], y[i]);
//     }
//     if (n == 1) {
//         cout << 0 << endl;
//         return 0;
//     }
//     // auto res = intersection_circle(xy[0], xy[2], 2.4 / 3, 2.4 / 2);
//     // DEBUG_VEC(res);
//     // return 0;

//     long double ans = inf;
//     rep (i, n) {
//         for (int j = i + 1; j < n; j++) {
//             for (int l = j + 1; l < n; l++) {
//                 long double ng = 0, ok = 1000000;
//                 rep (_, 200) {
//                     long double mid = (ng + ok) / 2;
//                     long double r1 = mid / c[i], r2 = mid / c[j];
//                     vector<P> inter = intersection_circle(xy[i], xy[j], r1, r2);
//                     bool flag = false;
//                     for (P cent: inter) {
//                         if (c[l] * abs(cent - xy[l]) <= mid) flag = true;
//                     }
//                     if (flag) ok = mid;
//                     else ng = mid;
//                 }
//                 long double r1 = ok / c[i], r2 = ok / c[j];
//                 vector<P> inter = intersection_circle(xy[i], xy[j], r1, r2);
//                 for (P cent: inter) {
//                     int cnt = 0;
//                     rep (i, n) {
//                         if (c[i] * abs(cent - xy[i]) <= ok + EPS) cnt++;
//                     }
//                     if (cnt >= k) {
//                         chmin(ans, ok);
//                     }
//                 }
//             }
//         }
//     }

//     rep (i, n) {
//         for (int j = i + 1; j < n; j++) {
//             long double ng = 0, ok = 1000000;
//             rep (_, 200) {
//                 long double mid = (ng + ok) / 2;
//                 long double r1 = mid / c[i], r2 = mid / c[j];
//                 vector<P> inter = intersection_circle(xy[i], xy[j], r1, r2);
//                 if (inter.size() >= 1) ok = mid;
//                 else ng = mid;
//             }
//             // DEBUG(pii(i, j));
//             // DEBUG(ok);
//             long double r1 = ok / c[i], r2 = ok / c[j];
//             vector<P> inter = intersection_circle(xy[i], xy[j], r1, r2);
//             // DEBUG_VEC(inter);
//             P cent = inter[0];
//             int cnt = 0;
//             rep (i, n) {
//                 // DEBUG(make_pair(c[i] * abs(cent - xy[i]), ok));
//                 if (c[i] * abs(cent - xy[i]) <= ok + EPS) {
//                     cnt++;
//                 }
//             }
//             // DEBUG(cnt);
//             if (cnt >= k) {
//                 chmin(ans, ok);
//             }
//         }
//     }

//     rep (i, n) {
//         long double ng = 0, ok = 1000000;
//         rep (_, 200) {
//             long double mid = (ng + ok) / 2;
//             int cnt = 0;
//             rep (j, n) {
//                 if (i == j) {
//                     cnt++;
//                     continue;
//                 }
//                 long double r1 = mid / c[i], r2 = mid / c[j];
//                 if (abs(xy[i] - xy[j]) <= r2) cnt++;
//             }
//             if (cnt >= k) {
//                 ok = mid;
//             }
//             else {
//                 ng = mid;
//             }
//         }
//         // DEBUG(i);
//         // DEBUG(ok);
//         chmin(ans, ok);
//     }

//     Sp(ans);
// }

Measured memory_bytes: 3992