import sys def get_divisors_sum(x): """x の約数の和を返す""" if x == 0: return 0 total = 0 i = 1 while i * i <= x: if x % i == 0: total += i if i * i != x: total += x // i i += 1 return total def solve(): # 入力の受け取り input_data = sys.stdin.read().split() if not input_data: return N = int(input_data[0]) K = int(input_data[1]) MOD = 100003 # K=1 の場合は初期値 N がそのまま答え if K == 1: print(N) return # 登場した値を記録する辞書(値 -> 最初に出現したインデックス i) # A_1 = N を記録 visited = {N: 1} # 数列を順にシミュレーションするための配列 history = [0, N] # 1-indexed にするため先頭に 0 を入れる current_val = N for i in range(1, K): # 次の項を計算 next_val = get_divisors_sum(current_val) % MOD current_idx = i + 1 # K 番目の項に達したら終了 if current_idx == K: print(next_val) return # すでに登場した値(ループ検出) if next_val in visited: prev_idx = visited[next_val] cycle_len = current_idx - prev_idx # 残りの移動回数 rem_steps = K - current_idx # 周期で割った余り分だけ進める ans_idx = prev_idx + (rem_steps % cycle_len) print(history[ans_idx]) return # 記録して次へ visited[next_val] = current_idx history.append(next_val) current_val = next_val if __name__ == '__main__': solve()