### sumSubarrayMins 
from typing import *
def f_gold(arr: List[int]) -> int:
    n = len(arr)
    left = [-1] * n
    right = [n] * n
    stk = []
    for i, v in enumerate(arr):
        while stk and arr[stk[-1]] >= v:
            stk.pop()
        if stk:
            left[i] = stk[-1]
        stk.append(i)
    stk = []
    for i in range(n - 1, -1, -1):
        while stk and arr[stk[-1]] > arr[i]:
            stk.pop()
        if stk:
            right[i] = stk[-1]
        stk.append(i)
    mod = int(1e9) + 7
    return sum((i - left[i]) * (right[i] - i) * v for i, v in enumerate(arr)) % mod