Загрузка данных


def solve():
    # Считываем размеры сетки шельфа
    n, m = map(int, input().split())
    
    # Заполняем матрицу стоимостей
    matrix = []
    for _ in range(n):
        matrix.append(list(map(int, input().split())))
        
    ans = float('inf') # Инициализируем бесконечностью для поиска минимума
    
    # 1. Проверяем вариант: 3 вышки в одной строке
    if m >= 3:
        for r in range(n):
            row_sorted = sorted(matrix[r])
            ans = min(ans, sum(row_sorted[:3]))
            
    # 2. Проверяем вариант: 3 вышки в одном столбце
    if n >= 3:
        for c in range(m):
            col_vals = [matrix[r][c] for r in range(n)]
            col_sorted = sorted(col_vals)
            ans = min(ans, sum(col_sorted[:3]))
            
    # 3. Проверяем вариант: уголок (L-образная сеть)
    if n >= 2 and m >= 2:
        # Для каждой строки находим два минимальных элемента в формате [значение, индекс_столбца]
        row_mins = []
        for r in range(n):
            indexed_row = sorted([[matrix[r][c], c] for c in range(m)])
            row_mins.append(indexed_row[:2])
            
        # Для каждого столбца находим два минимальных элемента в формате [значение, индекс_строки]
        col_mins = []
        for c in range(m):
            indexed_col = sorted([[matrix[r][c], r] for r in range(n)])
            col_mins.append(indexed_col[:2])
            
        # Перебираем каждую клетку (r, c) как центральный узел сети
        for r in range(n):
            for c in range(m):
                # Ищем лучшую соседнюю вышку в строке r (не в той же клетке c)
                if row_mins[r][0][1] != c:
                    min_row_val = row_mins[r][0][0]
                else:
                    min_row_val = row_mins[r][1][0]
                    
                # Ищем лучшую соседнюю вышку в столбце c (не в той же клетке r)
                if col_mins[c][0][1] != r:
                    min_col_val = col_mins[c][0][0]
                else:
                    min_col_val = col_mins[c][1][0]
                    
                # Считаем общую стоимость уголка
                current_cost = matrix[r][c] + min_row_val + min_col_val
                ans = min(ans, current_cost)
                
    print(ans)

solve()