class Solution:
    # 动态规划:dp(n) = (dp(n - 1) + m) % n
    # 自己删掉第m个后,重新摆一下就知道了。
    # 用来描述的、最终求解的,都是第几位第几位。
    # 所以dp(n)删除第m位后再求解,就等价于,dp(n-1)先移动m位再求解
    def LastRemaining_Solution(self, n: int, m: int) -> int:
        dp = 0
        for i in range(2, n + 1):
            dp = (dp + m) % i
        return dp