/**\
https://ac.nowcoder.com/acm/problem/14526
01背包问题变种
\**/
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define go continue
#define int long long
#define PII pair<int, int>
#define sf(x) scanf("%lld",&x)
#define pf(x) printf("%lld\n",x)
#define ytz int _; sf(_); while(_--)
#define fory(i,a,b) for(int i = a; i <= b; ++i)
#define forl(i,a,b) for(int i = a; i >= b; --i)
#define debug(a) cout << #a << " = " << a <<endl;
const int N = 3e2 + 10;
int n, m;
int f[N][N], a[N][N];
signed main()
{
sf(n), sf(m);
fory(i, 1, n)
{
fory(j, 1, m) sf(a[i][j]);
sort(a[i] + 1, a[i] + 1 + m);
fory(j, 1, m) a[i][j] += a[i][j - 1];
}
memset(f, 0x3f, sizeof f);
f[0][0] = 0;
//f[i][j] 表示第i天,目前到现在买了j个糖果
for(int i = 1; i <= n; ++i)
{
int len = min(n, i * m); //n = 3 m = 2情况
for(int j = 1; j <= len; ++j)
{
for(int k = i - 1; k <= j; ++k)
{
f[i][j] = min(f[i][j], f[i - 1][k] + a[i][j - k] + (j - k) * (j - k));
}
}
}
pf(f[n][n]);
return 0;
}