#include<bits/stdc++.h>
using namespace std;
int n,m,ans=0,cnt=0;
int fa[200000];
struct rec {
int t1;
int t2;
int t3;
}edge[200000];
bool operator <(rec a, rec b) {
return a.t3<b.t3;
}
int get(int x) {
if(x==fa[x]) return x;
return fa[x]=get(fa[x]);
}
int main() {
cin>>n>>m;
int cnt=0;
for(int i=1;i<=m;i++) fa[i]=i;
for(int i=1;i<=m;i++) {
cnt++;
edge[i].t1=0;
edge[i].t2=i;
edge[i].t3=n;
}
int flage;
for(int i=1;i<=m;i++) {
for(int j=1;j<=m;j++) {
cin>>flage;
if(flage) {
cnt++;
edge[cnt].t1=i;
edge[cnt].t2=j;
edge[cnt].t3=flage;
}
}
}
sort(edge+1,edge+cnt+1);
for(int i=1;i<=m;i++) {
int x=get(edge[i].t1); int y=get(edge[i].t2);
if(x==y) continue;
fa[x]=y;
ans+=edge[i].t3;
}
cout<<ans<<endl;
return 0;
}