int n=mat.size();
int m=mat[0].size();
priority_queue<int,vector ,greater> pq;
for(int i=0;i<m;i++)
{
int j=i;
int k=0;
vector<int> t1;
while(j<m && k<n)
{
pq.push(mat[k][j]);
k++;
j++;
}
j=i;
k=0;
while(!pq.empty())
{
mat[k][j]=pq.top();
pq.pop();
k++;
j++;
}
}
for(int i=1;i<n;i++)
{
int j=0;
int k=i;
while(k<n && j<m)
{
pq.push(mat[k][j]);
k++;
j++;
}
j=0;
k=i;
while(!pq.empty())
{
mat[k][j]=pq.top();
pq.pop();
k++;
j++;
}
}
return mat;