Данная программа неоптимальна, так как в случае нескольких максимумов в строке будет выбран первый.
Создайте функцию для 2 части и передавайте в неё необходимые параметры.
for (int row = 0; row < n; row++) {
int localMax = arr[row][0];
int maxColumn=0;
for (int column = 0; column < m; column++) {
if (localMax < arr[row][column]) {
localMax = arr[row][column];
maxColumn=column;
}
}
//2 часть
int localMin = localMax;
bool isMinInColumn=true;
for(int row2=0;row2<n;row2++){
if(arr[row2][maxColumn]<=localMin && row2!=row){
isMinInColumn=false;
break;
}
}
if(isMinInColumn){
//печатаем ответ тут
//System.out.println("Ответ:"+localMin);
break;
}
}