#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
using namespace std;
const int maxn=110;
const int maxe=50010;
struct Edge
{
	int u,v;
	double w;
}edge[maxe];
int nv,ne;
void add(int u,int v,double w)
{
	edge[ne].u=u;
	edge[ne].v=v;
	edge[ne++].w=w;
}
const double inf=1e12;
double In[maxn];
int pre[maxn],ID[maxn],vis[maxn];
double Directed_MST(int root)
{
	double ret=0;
	int i,u,v,cnt;
	while(1)
	{
		for(i=0;i<=nv;++i)In[i]=inf;
		for(i=0;i<ne;++i)
		{
			u=edge[i].u;
			v=edge[i].v;
			if(edge[i].w<In[v]&&u!=v)
			{
				In[v]=edge[i].w;
				pre[v]=u;
			}
		}
		//cout <<"root:"<<root<<" ";for(i=0;i<=nv;++i)cout <<In[i]<<" ";cout <<endl;
		for(i=0;i<=nv;++i)
			if(i!=root&&In[i]==inf)return -1;
		cnt=0;
		memset(ID,-1,sizeof(ID));
		memset(vis,-1,sizeof(vis));
		In[root]=0;
		for(i=0;i<=nv;++i)
		{
			ret+=In[i];
			for(v=i;vis[v]!=i&&ID[v]==-1&&v!=root;v=pre[v])
				vis[v]=i;
			if(v!=root&&ID[v]==-1)
			{
				for(u=pre[v];u!=v;u=pre[u])
					ID[u]=cnt;
				ID[v]=cnt++;
			}
		}
		if(cnt==0)break;
		for(i=0;i<=nv;++i)
			if(ID[i]==-1)ID[i]=cnt++;
		for(i=0;i<ne;++i)
		{
			v=edge[i].v;
			edge[i].u=ID[edge[i].u];
			edge[i].v=ID[edge[i].v];
			if(edge[i].u!=edge[i].v)
				edge[i].w-=In[v];
		}
		nv=cnt-1;
		root=ID[root];
	}
	return ret;
}
int n,m;
#define sqr(v) ((v)*(v))
struct Point
{
	double v[101];
	double length()
	{
		double res=0;
		for(int i=0;i<m;++i)
			res+=sqr(v[i]);
		return res;
	}
	Point operator -(const Point &p)
	{
		Point res;
		for(int i=0;i<m;++i)
			res.v[i]=v[i]-p.v[i];
		return res;
	}
}pt[101];
double len(int a,int b)
{
	double lena=sqrt(pt[a].length()),lenb=sqrt(pt[b].length()),res=0;
	for(int i=0;i<m;++i)
		res+=pt[a].v[i]*pt[b].v[i];
	double cosv=res/lena/lenb;
	return sqr(lenb*sin(acos(cosv)));
}
int main()
{
	int i,j;
	scanf("%d%d",&m,&n);
	for(i=1;i<=n;++i)
	{
		for(j=0;j<m;++j)
		{
			scanf("%lf",&pt[i].v[j]);
		}
		add(0,i,pt[i].length());
	}
	for(i=1;i<=n;++i)
		for(j=1;j<=n;++j)
		{
			if(i==j)continue;
			add(i,j,len(i,j));
		}
	nv=n;
	printf("%.9f\n",Directed_MST(0));
	return 0;
}