#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion const int P = 100003; var n = I(); var k = I(); if (k == 1) { Console.WriteLine(n); return; } var prime = new Prime(P); var divall = prime.DivisorsAll(); var fz = new int[P + 1]; for (var i = 1; i <= P; i++) { var divz = divall[i]; foreach (var div in divz) fz[i] = (fz[i] + div) % P; } var ans = 0; for (var i = 1; i * i <= n; i++) { if (n % i != 0) continue; ans += i; if (i * i != n) ans += n / i; ans %= P; } k -= 2; while (k > 0) { if ((k & 1) != 0) ans = fz[ans]; var nfz = new int[P + 1]; for (var i = 1; i <= P; i++) nfz[i] = fz[fz[i]]; fz = nfz; k >>= 1; } Console.WriteLine(ans); class Prime { public readonly int[] Sieve, Primes; public Prime(int n) { if (n <= 3) n = 3; var sieve = new int[n + 1]; var (d, i) = (2, 5); var primes = new List(){ 2, 3 }; sieve[1] = 1; for (var j = 2; j <= n; j += 2) sieve[j] = 2; for (var j = 3; j <= n; j += 3) sieve[j] = 3; while (i <= n) { if (sieve[i] == 0) { primes.Add(i); for (var j = i; j <= n; j += i) sieve[j] = i; } i += d; d ^= 6; } (Sieve, Primes) = (sieve, primes.ToArray()); } } static class PrimeExtensions { public static List[] DivisorsAll(this Prime prime) { var l = prime.Sieve.Length; var res = new List[l]; for (var i = 0; i < l; i++) res[i] = new(); for (var i = 1; i < l; i++) for (var j = i; j < l; j += i) res[j].Add(i); return res; } }