#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    
    vector<vector<int>> grid(n, vector<int>(m));
    int max_val = 0, min_val = 101;
    int max_row = 0, max_col = 0;
    int min_row = 0, min_col = 0;
    
    // 读取矩阵并记录最大最小值位置
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cin >> grid[i][j];
            if (grid[i][j] > max_val) {
                max_val = grid[i][j];
                max_row = i;
                max_col = j;
            }
            if (grid[i][j] < min_val) {
                min_val = grid[i][j];
                min_row = i;
                min_col = j;
            }
        }
    }
    
    // 交换最大值和最小值的位置
    swap(grid[max_row][max_col], grid[min_row][min_col]);
    
    // 输出交换后的矩阵
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cout << grid[i][j];
            if (j < m - 1) cout << " ";
        }
        cout << endl;
    }
    
    return 0;
}

/**************************************************************
	Problem: 1999
	User: fuyijun
	Language: C++
	Result: Accepted
	Time:8 ms
	Memory:2076 kb
****************************************************************/