import std.stdio;
import std.algorithm;
import std.string;
import std.range;
import std.array;
import std.conv;
import std.complex;
import std.math;
import std.ascii;
import std.bigint;
import std.container;
import std.typecons;

auto readInts() {
	return array(map!(to!int)(readln().strip().split()));
}
auto readInt() {
	return readInts()[0];
}
auto readLongs() {
	return array(map!(to!long)(readln().strip().split()));
}
auto readLong() {
	return readLongs()[0];
}
auto readReals() {
	return array(map!(to!real)(readln().strip().split()));
}
auto readReal() {
	return readReals()[0];
}

const real eps = 1e-10;

int count(int n) {
	int ans;
	while(n) {
		ans += n & 1;
		n >>= 1;
	}
	return ans;
}

int[] list(int n) {
	int[] ans;
	for(int i; i < 32; ++i) {
		if(n & 1 << i) ans ~= i;
	}
	return ans;
}

real dist(real[] a, real[] b) {
	auto r = a.dup;
	r[] -= b[];
	return reduce!("a+b")(real(0), map!("a*a")(r));
}

void main(){
	auto NM = readInts();
	auto N = NM[0];
	auto M = NM[1];
	real[][] c;
	for(int i; i < N; ++i) {
		c ~= readReals();
	}
	real ans = 0;
	for(int i; i < 1 << N; ++i) {
		if(count(i) != M) continue;

		auto l = list(i);
		real d = 0;
		for(int j; j < M; ++j) {
			for(int k = j+1; k < M; ++k) {
				d += dist(c[l[j]], c[l[k]]);
			}
		}
		ans = max(ans, d);
	}
	writefln("%.6f", ans);
}