#include<bits/stdc++.h>
using namespace std;
const int N=505;
struct Edge{
int x,y,z;
}edge[250000];
int n,a,x,m,cnt,fa[N],ans,b;
bool cmp(Edge a,Edge b){
return a.z<b.z;
}
int findRoot(int x){
if(fa[x]!=x) fa[x]=findRoot(fa[x]);
return fa[x];
}
int main(){
cin>>a>>n;
for(int i=1;i<=n;i++){
fa[i]=i;
edge[++m]={0,i,a};
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>b;
if(i<j) edge[++m]={i,j,b};
}
}
sort(edge+1,edge+m+1,cmp);
for(int i=1;i<=m;i++){
int rx=findRoot(edge[i].x),ry=findRoot(edge[i].y);
if(rx==ry) continue;
fa[rx]=ry;
ans+=edge[i].z;
}
cout<<ans;
return 0;
}