#include
#include
using namespace std;
//此题关键在于存储每行第一个最大数的行列值
typedef struct Matrix
{
    int line;//行
    int row;//列
    int value;//值
};
int main(void)
{
    int m,n;
    while(cin >> m >> n)
    {
        Matrix matrix[m][n];
        Matrix matrix_temp[m];//存储每行之和以及每行第一个最大数的位置
        for(int i = 0;i < m;i++)
             matrix_temp[i].value = INT32_MIN;
        int sum;//计算每行之和
        for(int i = 0;i < m;i++)
        {
            sum = 0;
            for(int j = 0;j < n;j++)
            {
                cin >> matrix[i][j].value;
                matrix[i][j].line = i;
                matrix[i][j].row = j;
                sum += matrix[i][j].value;
                if(matrix[i][j].value > matrix_temp[i].value)//找到每行第一个最大数
                    matrix_temp[i] = matrix[i][j];
            }
            matrix_temp[i].value = sum;
        }
        for(int i = 0;i < m;i++)//对原矩阵重新赋值
        {
            int line = matrix_temp[i].line;
            int row = matrix_temp[i].row;
            matrix[line][row].value = matrix_temp[i].value;
        }
        for(int i = 0;i < m;i++)//输出
        {
            for(int j = 0;j < n;j++)
                cout << matrix[i][j].value << ' ';
            cout << endl;
        }
    }
    return 0;
}