#include <bits/stdc++.h>

using namespace std;

/*
    VERIFICAR:
    - Corner cases
    - Estouro de variavel
    - Acesso indevido de memoria
    
    MODULO NEGATIVO
    int modulo(int x,int N){
        return (x % N + N) %N;
    }

*/

#define _ ios_base::sync_with_stdio(0);cin.tie(0);
#define endl '\n'
#define f first
#define s second
#define pb push_back

typedef long long ll;
typedef pair<int, int> ii;

const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3fll;

int main() {_
    int t;
    cin >> t;
    while(t--) {
        int n, m;
        cin >> n >> m;
        int c;
        vector<ii> todosCaminhos;
        vector<multiset<int> > disponiveis(n);
        for(int I=0; I<n; I++) {
            for(int J=0; J<m; J++) {
                cin >> c;
                todosCaminhos.pb({c, I});
                disponiveis[I].insert(c);
            }
        }
        sort(todosCaminhos.begin(), todosCaminhos.end());
        vector<vector<int> > pegos(m, vector<int>(n, -1));
        for(int I=0; I<m; I++) {
            pegos[I][todosCaminhos[I].s] = todosCaminhos[I].f;
            disponiveis[todosCaminhos[I].s].erase(disponiveis[todosCaminhos[I].s].find(todosCaminhos[I].f));
        }
        for(int I=0; I<m; I++) {
            for(int J=0; J<n; J++) {
                if(pegos[I][J] == -1) {
                    pegos[I][J] = *disponiveis[J].begin();
                    disponiveis[J].erase(disponiveis[J].begin());
                } 
            }
        }
        for(int I=0; I<n; I++) {
            for(int J=0; J<m; J++) {
                cout << pegos[J][I] << ' ';
            }
            cout << endl;
        }

    }
	return 0;
}
