from typing import List


def find_min_conquered(lst: List[int]) -> int:
    """
    Return the smallest value in <lst>. Can also be designed with parameters
    b, and e, rather than slicing the lists in the current algorithm. O(lg(n))

    >>> find_min_conquered([3, 4, 5, 6, 7])
    3
    >>> find_min_conquered([5, 6, 7, 3, 4])
    3
    >>> find_min_conquered([7, 3, 4, 5, 6])
    3
    >>> find_min_conquered([1, 2, 3, 4, 5, 6, 7, 8, 9])
    1
    >>> find_min_conquered([9, 12, 15, 17, 20, 1, 2, 3, 4, 5, 6, 7, 8])
    1
    >>> find_min_conquered([9, 12, 15, 1, 3, 4, 5, 6, 7, 8])
    1
    """
    n = len(lst)
    if n < 2:
        # then there is 1 item in the list.
        return lst[0]
    elif lst[0] < lst[-1]:
        # then the list is not rotated
        return lst[0]
    elif lst[1] < lst[0]:   # n == 2
        # there are only 2 elements
        return lst[1]

    else:
        # divide the list in half. Note: n is at least 3.
        m = n // 2

        if lst[m - 1] < lst[-1]:
            # then the smallest must be before m
            return find_min_conquered(lst[:m])
        else:
            return find_min_conquered(lst[m:])