#include <bits/stdc++.h>
using namespace std;
int n,m;
inline __int128 read(){
__int128 x = 0, f = 1;
char ch = getchar();
while(ch < '0' || ch > '9'){
if(ch == '-')
f = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9'){
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
inline void print(__int128 x){
if(x < 0){
putchar('-');
x = -x;
}
if(x > 9)
print(x / 10);
putchar(x % 10 + '0');
}
#define i128 __int128
i128 a[85];
i128 f[85][85]; //区间枚举!!
i128 ans; //答案记录!!
i128 base[85];
void solve()
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
f[i][j]=0;
}
}
for(int i=1;i<=m;i++)
{
a[i]=read();
}
// for(int i=1;i<=m;i++)
// {
// //f[i][i]=2*a[i];//这是每次取走一个元素!!
// print(a[i]);
// cout<<endl;
// }
//print(base[5]);
//cout<<endl;
for(int i=1;i<=m;i++)
{
for(int j=m;j>=i;j--)
{
f[i][j]=max(f[i][j],f[i-1][j]+base[m-j+i-1]*a[i-1]);
f[i][j]=max(f[i][j],f[i][j+1]+base[m-j+i-1]*a[j+1]);
}
}
i128 mx=0;
for(int i=1;i<=m;i++)
{
mx=max(mx,f[i][i]+base[m]*a[i]);
}
// print(mx);
// cout<<endl;
ans+=mx;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n>>m;
base[0]=1;
for(int i=1;i<=m;i++)
{
base[i]=base[i-1]*2;
}
for(int i=1;i<=n;i++)
{
solve();
}
print(ans);
}