Я бы сгладил массив, а затем отсортировал его.Затем вы можете бегать по массиву, считая элементы и проверяя ваш счет каждый раз, когда значение изменяется.
int [][] arr = { {1, 2}, {3, 4}, {5, 5}, {1, 3}, {1, 2}};
int [] flatArray = Arrays.stream(arr).flatMapToInt(Arrays::stream).sorted().toArray();
int previousValue = -1;
int findCounter = 0;
int maxFindCounter = -1;
int maxValueFound = -1;
for(int i = 0; i < flatArray.length; i++) {
if(previousValue != flatArray[i]) {
if(findCounter > maxFindCounter) {
maxFindCounter = findCounter;
maxValueFound = previousValue;
}
findCounter = 0;
}
previousValue = flatArray[i];
findCounter ++;
}
System.out.println(maxValueFound + " : " + maxFindCounter);