#include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define rep(i, init, end) for(ll i = init; i < end; i++) #define REP(i, init, end) for(ll i = init; i < end + 1; i++) #define rev(i, end, init) for(ll i = init - 1; i >= end; i--) #define REV(i, end, init) for(ll i = init; i >= end; i--) #define PI 3.14159265359 #define EPS 0.0000000001 #define MOD 1000000007 //cout << std::fixed << std::setprecision(15) << y << endl; ll smallMod = 100003; // ll smallMod = 13; ll f(ll x){ ll a = 1; ll ans = 0; while(a * a <= x){ if(x % a == 0){ if(a != x / a){ ans += a + (x / a); }else{ ans += a; } ans %= smallMod; } a++; } return ans; } int main(){ ll N, K; cin >> N >> K;//cout << "f: " << f(7) << endl; ll visited[smallMod + 1]; rep(i, 0, smallMod + 1){ visited[i] = -1; } ll p = N; if(p <= smallMod){ visited[p] = 1; } vector path; path.push_back(p); ll nextP = f(p); ll step = 1; while(visited[nextP] == -1){ // rep(i, 0, path.size()){cout << path[i] << ", ";}cout << endl; // rep(i, 0, smallMod + 1){cout << visited[i] << ", ";}cout << endl; if(step == K){ cout << p << endl; return 0; } p = nextP; visited[p] = step; path.push_back(p); step++; nextP = f(p); } // rep(i, 0, path.size()){cout << path[i] << ", ";}cout << endl; // rep(i, 0, smallMod + 1){cout << visited[i] << ", ";}cout << endl; ll loopSize = step - visited[nextP];//cout << "loopSize: " << loopSize << endl; K = (K - visited[nextP] - 1) % loopSize + visited[nextP] + 1; cout << path[K - 1] << endl; return 0; }