#include <bits/stdc++.h>
using namespace std;
#define alsammany ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define debugg(x, y) cout<<#x<<" = "<<x<<", "<<#y<<" = "<<y<< endl
#define debug(x) cout<<#x<<" = "<<x<<endl
#define raint(v) v.rbegin(),v.rend()
#define aint(v) v.begin(),v.end()
#define mem(dp, val) memset(dp, val, sizeof(dp))
#define F first
#define S second
#define endl "\n"
#define int long long
#define rc(r, c, v) vector<vector<node>>(r, vector<node>(c, v))
template <typename T> void display(const T& container) { cout << "{ "; for (const auto& element : container) { cout << element << " "; } cout << "}" << endl; } template <typename K, typename V> void display(const map<K, V>& container) { for (const auto& pair : container) { cout << "\n[" << pair.first << "]: "; display(pair.second); } }
const int N = 1e5+5;
const int M = 1e9+7;
const int inf = 0x3f3f3f3f3f3f3f3f;
// [سورة البلد: 4] ﴾ لَقَدْ خَلَقْنَا الْإِنسَانَ فِي كَبَدٍ ﴿ <------
int spf[N];
void sv(){
for(int i=2; i<N; i++){
if(!spf[i]){
for(int j=i; j<N; j+=i){
if(!spf[j]){
spf[j] = i;
}
}
}
}
}
map<int, int> prime_fact(int x){
map<int,int> mp;
while(x>1){
mp[spf[x]]++;
x /= spf[x];
}
return mp;
}
vector<int> v;
void gen(int div, map<int,int>::iterator it, map<int,int> &mp){
if(it == mp.end()){
v.push_back(div);
return;
}
for(int i=0, d=1; i<=it->second; i++, d*=it->first){
gen(div*d, ++it, mp);
it--;
}
}
vector<int> divs[N];
bool vis[N];
struct node{
int val, id;
};
int n,m;
vector<vector<node>> mat;
int dx[4] = {1,0,0,-1}; // D L R U
int dy[4] = {0,-1,1,0};
bool in(int r, int c){
if(r < 0 || c < 0 || r > n-1 || c > m-1) return 0;
return 1;
}
struct DSU {
map<int, int> parent, size;
int mx = 0;
void init(int val) {
parent[val] = val;
size[val] = 1;
mx = 1;
}
void add(int val) {
parent[val] = val;
size[val] = 1;
}
int find_root(int u) {
if (parent[u] == u) return u;
return parent[u] = find_root(parent[u]);
}
bool merge(int u, int v) {
int root_u = find_root(u);
int root_v = find_root(v);
if (root_u == root_v) return 0;
if (size[root_u] > size[root_v]) swap(root_u, root_v);
parent[root_u] = root_v;
size[root_v] += size[root_u];
mx = max(mx, size[root_v]);
return 1;
}
int maxi(){
return mx;
}
};
void Solve(){
cin>>n>>m;
int rid = 1;
mat = vector<vector<node>>(n, vector<node>(m, {0,0}));
vector<pair<int,int>> loc(N);
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cin>>mat[i][j].val;
mat[i][j].id = rid;
loc[rid] = {i,j};
rid++;
auto fp = prime_fact(mat[i][j].val);
v.clear();
gen(1, fp.begin(), fp);
for(auto d:v){
divs[d].push_back(mat[i][j].id);
}
}
}
vector<int> ans(n*m + 1);
int prv = 0;
// map<int, DSU> mp;
for(int d=N-1; d>0; d--){
DSU st;
for(auto id:divs[d]){
if(!st.mx) st.init(id);
else st.add(id);
auto [i,j] = loc[id];
for(int dir=0; dir<4; dir++){
int r = i + dx[dir];
int c = j + dy[dir];
if(in(r,c) && st.parent.count(mat[r][c].id)){ // alreay in dsu
// join
st.merge(id, mat[r][c].id);
}
}
}
int mx = st.maxi();
if(mx > prv){
for(int i=prv+1; i<=mx && i<n*m+1; i++){
ans[i] = d;
}
prv = mx;
}
}
for(int i=1; i<=n*m; i++){
cout<<ans[i]<<' ';
}
}
int32_t main(){
alsammany
sv();
// freopen("input.in", "r", stdin);
// freopen("output.out", "w", stdout);
int t = 1;
// cin >> t;
while(t--){
Solve();
// cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgYWxzYW1tYW55IGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiNkZWZpbmUgZGVidWdnKHgsIHkpIGNvdXQ8PCN4PDwiID0gIjw8eDw8IiwgIjw8I3k8PCIgPSAiPDx5PDwgZW5kbAojZGVmaW5lIGRlYnVnKHgpIGNvdXQ8PCN4PDwiID0gIjw8eDw8ZW5kbAojZGVmaW5lIHJhaW50KHYpIHYucmJlZ2luKCksdi5yZW5kKCkKI2RlZmluZSBhaW50KHYpIHYuYmVnaW4oKSx2LmVuZCgpCiNkZWZpbmUgbWVtKGRwLCB2YWwpIG1lbXNldChkcCwgdmFsLCBzaXplb2YoZHApKQojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTIHNlY29uZAojZGVmaW5lIGVuZGwgIlxuIgojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSByYyhyLCBjLCB2KSB2ZWN0b3I8dmVjdG9yPG5vZGU+PihyLCB2ZWN0b3I8bm9kZT4oYywgdikpCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIGRpc3BsYXkoY29uc3QgVCYgY29udGFpbmVyKSB7IGNvdXQgPDwgInsgIjsgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogY29udGFpbmVyKSB7IGNvdXQgPDwgZWxlbWVudCA8PCAiICI7IH0gY291dCA8PCAifSIgPDwgZW5kbDsgfSB0ZW1wbGF0ZSA8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gdm9pZCBkaXNwbGF5KGNvbnN0IG1hcDxLLCBWPiYgY29udGFpbmVyKSB7IGZvciAoY29uc3QgYXV0byYgcGFpciA6IGNvbnRhaW5lcikgeyBjb3V0IDw8ICJcblsiIDw8IHBhaXIuZmlyc3QgPDwgIl06ICI7IGRpc3BsYXkocGFpci5zZWNvbmQpOyB9IH0KY29uc3QgaW50IE4gPSAxZTUrNTsKY29uc3QgaW50IE0gPSAxZTkrNzsKY29uc3QgaW50IGluZiA9IDB4M2YzZjNmM2YzZjNmM2YzZjsKCi8vICBb2LPZiNix2Kkg2KfZhNio2YTYrzogNF0gIO+0viDZhNmO2YLZjtiv2ZIg2K7ZjtmE2Y7ZgtmS2YbZjtinINin2YTZktil2ZDZhtiz2Y7Yp9mG2Y4g2YHZkNmKINmD2Y7YqNmO2K/ZjSDvtL8gPC0tLS0tLSAKCmludCBzcGZbTl07CnZvaWQgc3YoKXsKICAgIGZvcihpbnQgaT0yOyBpPE47IGkrKyl7CiAgICAgICAgaWYoIXNwZltpXSl7CiAgICAgICAgICAgIGZvcihpbnQgaj1pOyBqPE47IGorPWkpewogICAgICAgICAgICAgICAgaWYoIXNwZltqXSl7CiAgICAgICAgICAgICAgICAgICAgc3BmW2pdID0gaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKbWFwPGludCwgaW50PiBwcmltZV9mYWN0KGludCB4KXsKICAgIG1hcDxpbnQsaW50PiBtcDsKICAgIHdoaWxlKHg+MSl7CiAgICAgICAgbXBbc3BmW3hdXSsrOwogICAgICAgIHggLz0gc3BmW3hdOwogICAgfQogICAgcmV0dXJuIG1wOwp9Cgp2ZWN0b3I8aW50PiB2Owp2b2lkIGdlbihpbnQgZGl2LCBtYXA8aW50LGludD46Oml0ZXJhdG9yIGl0LCBtYXA8aW50LGludD4gJm1wKXsgCiAgICBpZihpdCA9PSBtcC5lbmQoKSl7CiAgICAgICAgdi5wdXNoX2JhY2soZGl2KTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBmb3IoaW50IGk9MCwgZD0xOyBpPD1pdC0+c2Vjb25kOyBpKyssIGQqPWl0LT5maXJzdCl7CiAgICAgICAgZ2VuKGRpdipkLCArK2l0LCBtcCk7CiAgICAgICAgaXQtLTsKICAgIH0KfQoKdmVjdG9yPGludD4gZGl2c1tOXTsKYm9vbCB2aXNbTl07CgoKc3RydWN0IG5vZGV7CiAgICBpbnQgdmFsLCBpZDsKfTsKCmludCBuLG07CnZlY3Rvcjx2ZWN0b3I8bm9kZT4+IG1hdDsKCmludCBkeFs0XSA9IHsxLDAsMCwtMX07IC8vIEQgTCBSIFUKaW50IGR5WzRdID0gezAsLTEsMSwwfTsKCmJvb2wgaW4oaW50IHIsIGludCBjKXsKICAgIGlmKHIgPCAwIHx8IGMgPCAwIHx8IHIgPiBuLTEgfHwgYyA+IG0tMSkgcmV0dXJuIDA7CiAgICByZXR1cm4gMTsKfQoKc3RydWN0IERTVSB7CiAgICBtYXA8aW50LCBpbnQ+IHBhcmVudCwgc2l6ZTsKICAgIAogICAgaW50IG14ID0gMDsKCiAgICB2b2lkIGluaXQoaW50IHZhbCkgewogICAgICAgIHBhcmVudFt2YWxdID0gdmFsOwogICAgICAgIHNpemVbdmFsXSA9IDE7CiAgICAgICAgbXggPSAxOwogICAgfQogICAgdm9pZCBhZGQoaW50IHZhbCkgewogICAgICAgIHBhcmVudFt2YWxdID0gdmFsOwogICAgICAgIHNpemVbdmFsXSA9IDE7CiAgICB9CgogICAgaW50IGZpbmRfcm9vdChpbnQgdSkgewogICAgICAgIGlmIChwYXJlbnRbdV0gPT0gdSkgcmV0dXJuIHU7CiAgICAgICAgcmV0dXJuIHBhcmVudFt1XSA9IGZpbmRfcm9vdChwYXJlbnRbdV0pOwogICAgfQoKICAgIGJvb2wgbWVyZ2UoaW50IHUsIGludCB2KSB7CiAgICAgICAgaW50IHJvb3RfdSA9IGZpbmRfcm9vdCh1KTsKICAgICAgICBpbnQgcm9vdF92ID0gZmluZF9yb290KHYpOwoKICAgICAgICBpZiAocm9vdF91ID09IHJvb3RfdikgcmV0dXJuIDA7CgogICAgICAgIGlmIChzaXplW3Jvb3RfdV0gPiBzaXplW3Jvb3Rfdl0pIHN3YXAocm9vdF91LCByb290X3YpOwogICAgICAgIHBhcmVudFtyb290X3VdID0gcm9vdF92OwogICAgICAgIHNpemVbcm9vdF92XSArPSBzaXplW3Jvb3RfdV07CiAgICAgICAgbXggPSBtYXgobXgsIHNpemVbcm9vdF92XSk7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgaW50IG1heGkoKXsKICAgICAgICByZXR1cm4gbXg7CiAgICB9Cn07Cgp2b2lkIFNvbHZlKCl7ICAgCiAgICBjaW4+Pm4+Pm07CiAgICBpbnQgcmlkID0gMTsKICAgIG1hdCA9IHZlY3Rvcjx2ZWN0b3I8bm9kZT4+KG4sIHZlY3Rvcjxub2RlPihtLCB7MCwwfSkpOwogICAgdmVjdG9yPHBhaXI8aW50LGludD4+IGxvYyhOKTsKICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKyl7CiAgICAgICAgZm9yKGludCBqPTA7IGo8bTsgaisrKXsKICAgICAgICAgICAgY2luPj5tYXRbaV1bal0udmFsOwogICAgICAgICAgICBtYXRbaV1bal0uaWQgPSByaWQ7CiAgICAgICAgICAgIGxvY1tyaWRdID0ge2ksan07CiAgICAgICAgICAgIHJpZCsrOwoKCiAgICAgICAgICAgICAgICBhdXRvIGZwID0gcHJpbWVfZmFjdChtYXRbaV1bal0udmFsKTsKICAgICAgICAgICAgICAgIHYuY2xlYXIoKTsKICAgICAgICAgICAgICAgIGdlbigxLCBmcC5iZWdpbigpLCBmcCk7CiAgICAgICAgICAgICAgICBmb3IoYXV0byBkOnYpewogICAgICAgICAgICAgICAgICAgIGRpdnNbZF0ucHVzaF9iYWNrKG1hdFtpXVtqXS5pZCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIH0KICAgIH0KCiAgICAKICAgIHZlY3RvcjxpbnQ+IGFucyhuKm0gKyAxKTsKICAgIGludCBwcnYgPSAwOwogICAgLy8gbWFwPGludCwgRFNVPiBtcDsKCiAgICBmb3IoaW50IGQ9Ti0xOyBkPjA7IGQtLSl7CiAgICAgICAgRFNVIHN0OwogICAgICAgIGZvcihhdXRvIGlkOmRpdnNbZF0pewogICAgICAgICAgICBpZighc3QubXgpIHN0LmluaXQoaWQpOwogICAgICAgICAgICBlbHNlIHN0LmFkZChpZCk7CiAgICAgICAgICAgIGF1dG8gW2ksal0gPSBsb2NbaWRdOwogICAgICAgICAgICBmb3IoaW50IGRpcj0wOyBkaXI8NDsgZGlyKyspewogICAgICAgICAgICAgICAgaW50IHIgPSBpICsgZHhbZGlyXTsKICAgICAgICAgICAgICAgIGludCBjID0gaiArIGR5W2Rpcl07CiAgICAgICAgICAgICAgICBpZihpbihyLGMpICYmIHN0LnBhcmVudC5jb3VudChtYXRbcl1bY10uaWQpKXsgLy8gYWxyZWF5IGluIGRzdQogICAgICAgICAgICAgICAgICAgIC8vIGpvaW4KICAgICAgICAgICAgICAgICAgICBzdC5tZXJnZShpZCwgbWF0W3JdW2NdLmlkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaW50IG14ID0gc3QubWF4aSgpOwogICAgICAgIGlmKG14ID4gcHJ2KXsKICAgICAgICAgICAgZm9yKGludCBpPXBydisxOyBpPD1teCAmJiBpPG4qbSsxOyBpKyspewogICAgICAgICAgICAgICAgYW5zW2ldID0gZDsKICAgICAgICAgICAgfQogICAgICAgICAgICBwcnYgPSBteDsKICAgICAgICB9CiAgICB9CgoKICAgIGZvcihpbnQgaT0xOyBpPD1uKm07IGkrKyl7CiAgICAgICAgY291dDw8YW5zW2ldPDwnICc7CiAgICB9CiAgICAKfQoKaW50MzJfdCBtYWluKCl7CiAgICBhbHNhbW1hbnkKICAgIHN2KCk7CiAgICAvLyBmcmVvcGVuKCJpbnB1dC5pbiIsICJyIiwgc3RkaW4pOyAKICAgIC8vIGZyZW9wZW4oIm91dHB1dC5vdXQiLCAidyIsIHN0ZG91dCk7IAogICAgaW50IHQgPSAxOwogICAgCiAgICAvLyBjaW4gPj4gdDsKICAgIAogICAgd2hpbGUodC0tKXsKICAgICAgICBTb2x2ZSgpOwogICAgICAgIC8vIGNvdXQgPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9