#include<iostream>
using namespace std;
long long poww(long long a,long long b)
{
long long ans=1;
while(b--) ans*=a;
return ans;
}
int gcd(int a,int b)
{
int r=0;
while(b!=0)
{
r=a%b;
a=b;
b=r;
}
return a;
}
int main()
{
int n,m;
while(cin>>m>>n)
{
if(m==0&&n==0)
{
break;
}
long long ans=0;
for(int i=1;i<=n;i++) ans+=poww(m,gcd(n,i));
if(n%2==1) ans+=n*poww(m,(n+1)/2);
else ans+=n/2*poww(m,(n+2)/2)+n/2*poww(m,n/2);
cout<<ans/(2*n)<<endl;
}
}
又一道裸polya