#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node{
int u,v,w;
bool operator<(const node&a)const{
return w<a.w;
}
}e[10100];
int prt[10100];
void chushi(){
for(int i=1;i<=m;++i)prt[i]=i;
}
int find(int s){
if(prt[s]==s)return s;
else return prt[s]=find(prt[s]);
}
int len=0;
void read(){
scanf("%d%d",&n,&m);
chushi();
for(int i=1;i<=m;++i){
for(int j=1;j<=m;++j){
int x;
scanf("%d",&x);
if(x==0)x=n;
if(i<j)e[++len]={i,j,x};
if(i==j)e[++len]={i,j,n};
}
}
sort(e+1,e+len+1);
if(m==1){
printf("%d",n);
exit(0);
}
}
void kru(){
int cnt=0,res=n;
for(int i=1;i<=len;++i){
int u=e[i].u,v=e[i].v,w=e[i].w;
if(find(u)!=find(v)||u==v){
prt[find(u)]=prt[find(v)];
cnt++;
res+=w;
if(cnt==m-1){
printf("%d",res);
exit(0);
}
}
}
}
int main(){
read();
kru();
return 0;
}