def _lower_bound(arr: List[int], cmp: int) -> Optional[int]:
    'Return the first value in arr greater or equal to cmp.\n\n        Return None if no such value exists.\n        '
    left = 0
    right = len(arr)
    while (left < right):
        mid = ((left + right) // 2)
        if (arr[mid] < cmp):
            left = (mid + 1)
        else:
            right = mid
    if (left == len(arr)):
        return None
    return arr[left]
Return the first value in arr greater or equal to cmp.

Return None if no such value exists.
def _lower_bound(arr: List[int], cmp: int) -> Optional[int]:
    'Return the first value in arr greater or equal to cmp.\n\n        Return None if no such value exists.\n        '
    left = 0
    right = len(arr)
    while (left < right):
        mid = ((left + right) // 2)
        if (arr[mid] < cmp):
            left = (mid + 1)
        else:
            right = mid
    if (left == len(arr)):
        return None
    return arr[left]