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


import sys

# Увеличиваем лимит рекурсии на всякий случай, тут не нужно, но хорошая практика для олимпиад
sys.setrecursionlimit(2000)

def solve():
    # Читаем n и m
    input_data = sys.stdin.read().split()
    if not input_data:
        return
    
    iterator = iter(input_data)
    n = int(next(iterator))
    m = int(next(iterator))

    # Считываем матрицу стоимостей
    a = []
    for _ in range(n):
        row = [int(next(iterator)) for _ in range(m)]
        a.append(row)

    MOD = 1000000103
    INF = float('inf')

    # Для каждой строки храним два наименьших значения и их индексы колонок
    # row_min1[i] = (значение, индекс_колонки)
    row_min1 = [(INF, -1)] * n
    row_min2 = [(INF, -1)] * n

    for i in range(n):
        for j in range(m):
            val = a[i][j]
            if val < row_min1[i][0]:
                row_min2[i] = row_min1[i]
                row_min1[i] = (val, j)
            elif val < row_min2[i][0]:
                row_min2[i] = (val, j)

    # Для каждого столбца храним два наименьших значения и их индексы строк
    col_min1 = [(INF, -1)] * m
    col_min2 = [(INF, -1)] * m

    for j in range(m):
        for i in range(n):
            val = a[i][j]
            if val < col_min1[j][0]:
                col_min2[j] = col_min1[j]
                col_min1[j] = (val, i)
            elif val < col_min2[j][0]:
                col_min2[j] = (val, i)

    best_total = INF

    # Перебираем каждую клетку как центральную вышку №2
    for i in range(n):
        for j in range(m):
            # Находим минимальную стоимость в строке i, исключая колонку j
            if row_min1[i][1] != j:
                min_row_val = row_min1[i][0]
            else:
                min_row_val = row_min2[i][0]

            # Находим минимальную стоимость в столбце j, исключая строку i
            if col_min1[j][1] != i:
                min_col_val = col_min1[j][0]
            else:
                min_col_val = col_min2[j][0]

            # Если не нашлось подходящей клетки в строке или столбце — пропускаем
            if min_row_val == INF or min_col_val == INF:
                continue

            current_total = a[i][j] + min_row_val + min_col_val
            if current_total < best_total:
                best_total = current_total

    print(best_total % MOD)

if __name__ == "__main__":
    solve()