
func largestSubmatrix(matrix [][]int) int {
n, m := len(matrix), len(matrix[0])
for j := 0; j < m; j++ {
for i := 1; i < n; i++ {
if matrix[i][j] == 1 {
matrix[i][j] += matrix[i - 1][j]
}
}
}
var ans int
for i := 0; i < n; i++ {
slices.Sort(matrix[i])
for j := m - 1; j >= 0; j-- {
ans = max(ans, (m - j) * matrix[i][j])
}
}
return ans
}