def euclidean_algorithm(a: int, b: int) -> int:
    """
    Finds the greatest common divisor of two natural numbers.
    If n or k is less than or equal to 0, it raises ValueError.
    >>> euclidean_algorithm(6,9)
    3
    >>> euclidean_algorithm(8, 20)
    4
    >>> euclidean_algorithm(19, 17)
    1
    >>> euclidean_algorithm(20, -2)
    Traceback (most recent call last):
        ...
    ValueError: a and b must be more than 0
    >>> euclidean_algorithm(-3, 8)
    Traceback (most recent call last):
        ...
    ValueError: a and b must be more than 0
    """
    if a <= 0 or b <= 0:
        raise ValueError('a and b must be more than 0')

    if a == b:
        return a
    elif a > b:
        return euclidean_algorithm(a - b, b)
    else:  # a<b
        return euclidean_algorithm(a, b - a)