#include<bits/stdc++.h>
using namespace std;
int a[1007][1007];
pair<int,int>p1[1007],p2[1007];
int rk1[1007][1007],rk2[1007][1007],no1[1007][1007],no2[1007][1007];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
}
}
int cnt=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
p1[j].first=a[i][j];
p1[j].second=j;
}
sort(p1+1,p1+1+m);//这一行排序
cnt=0;
for(int j=1;j<=m;j++){
if(j==1||p1[j].first!=p1[j-1].first)
cnt++;//从西向东计数,将相等的点缩起来
rk1[i][p1[j].second]=cnt;
}
cnt=0;
for(int j=m;j>=1;j--){//从东向西计数
if(j==m||p1[j].first!=p1[j+1].first)
cnt++;
no1[i][p1[j].second]=cnt;
}
}
cnt=0;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
p2[j].first=a[j][i];
p2[j].second=j;
}
sort(p2+1,p2+1+n);//列排序
cnt=0;
for(int j=1;j<=n;j++){
if(j==1||p2[j].first!=p2[j-1].first)
cnt++;//从北向南计数
rk2[i][p2[j].second]=cnt;
}
cnt=0;
for(int j=n;j>=1;j--){
if(j==n||p2[j].first!=p2[j+1].first)
cnt++;//从南向北
no2[i][p2[j].second]=cnt;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int ans=max(rk1[i][j],rk2[j][i])+max(no1[i][j],no2[j][i])-1;//西北最值加上东南最值减去自身多数的一次
printf("%d ",ans);
}
printf("
");
}
return 0;
}