count the number of unique paths from a00 to am1n1 we are allowed to move either right or down from a cell in the matrix approaches i recursion recurse starting from am1n1 upwards and leftwards add the path count of both recursions and return count ii dynamic programming start from a00 store the count in a count matrix return countm1n1 tn omn sn omn taking care of the edge cases matrix of size 1xn or mx1 number of ways to reach aij number of ways to reach ai1j aij1 count the number of unique paths from a 0 0 to a m 1 n 1 we are allowed to move either right or down from a cell in the matrix approaches i recursion recurse starting from a m 1 n 1 upwards and leftwards add the path count of both recursions and return count ii dynamic programming start from a 0 0 store the count in a count matrix return count m 1 n 1 t n o mn s n o mn taking care of the edge cases matrix of size 1xn or mx1 number of ways to reach a i j number of ways to reach a i 1 j a i j 1
def count_paths(m, n):
    if m < 1 or n < 1:
        return -1
    count = [[None for j in range(n)] for i in range(m)]

    
    for i in range(n):
        count[0][i] = 1
    for j in range(m):
        count[j][0] = 1

    for i in range(1, m):
        for j in range(1, n):
            
            
            count[i][j] = count[i - 1][j] + count[i][j - 1]

    print(count[m - 1][n - 1])


def main():
    m, n = map(int, input('Enter two positive integers: ').split())
    count_paths(m, n)


if __name__ == '__main__':
    main()