#include #define fi first #define se second #define rep(i,s,n) for (int i = (s); i < (n); ++i) #define rrep(i,g,n) for (int i = (n)-1; i >= (g); --i) #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() #define len(x) (int)(x).size() #define dup(x,y) (((x)+(y)-1)/(y)) #define pb push_back #define eb emplace_back #define Field(T) vector> using namespace std; using ll = long long; using ull = unsigned long long; template using pq = priority_queue,greater>; using P = pair; templatebool chmax(T&a,T b){if(abool chmin(T&a,T b){if(b> d(p); rep(i,1,p) { for (int j = i; j < p; j += i) { d[j].eb(i); } } vector nxt(p); rep(i,1,p) { for (int e : d[i]) nxt[i] += e; nxt[i] %= p; } int n; ll k; cin >> n >> k; if (k == 1) { cout << n << endl; return 0; } k -= 2; int s = 0; rep(i,1,n+1) if (n%i == 0) s += i; s %= p; // int s0 = s; // rep(j,0,k) s0 = nxt[s0]; // cout << s0 << endl; int a = s, b = s; do { a = nxt[a], b = nxt[nxt[b]]; } while(a != b); int l = 0; b = s; while(a != b) { a = nxt[a], b = nxt[b]; ++l; } int m = 0; do { b = nxt[b]; ++m; } while(a != b); // cout << l << " " << m << endl; if (k <= l) { int ans = s; rep(i,0,k) ans = nxt[ans]; cout << ans << endl; return 0; } k = (k-l)%m; int ans = s; rep(i,0,k+l) ans = nxt[ans]; cout << ans << endl; return 0; }