rt
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll M=8e6;
ll N=8e6;
void fastread()
{
ios::sync_with_stdio(0);
}
ll np,p[M+9],phi[M+9],Sphi[M+9],inv2,inv6;
bool isp[M+9];
ll mod,n,ans;
map<ll,ll>mp;
ll qpow(ll x,ll k)
{
ll res=1;
while(k)
{
if(k&1)res=res*x%mod;
x=x*x%mod;
k>>=1;
}
return res;
}
void get()
{
memset(isp,1,sizeof(isp));
isp[1]=0;
phi[1]=1;
for(ll i=2;i<=N;i++)
{
if(isp[i])
{
p[++np]=i;
phi[i]=i-1;
}
for(ll j=1;j<=np&&i*p[j]<=N;j++)
{
ll x=i*p[j];
isp[x]=0;
if(i%p[j]!=0)phi[x]=phi[i]*(p[j]-1)%mod;
else
{
phi[x]=phi[i]*p[j]%mod;
break;
}
}
}
for(ll i=1;i<=N;i++)
Sphi[i]=(Sphi[i-1]+phi[i]*i%mod*i%mod)%mod;
}
ll S(ll x)
{
x%=mod;
return x*(x+1)%mod*inv2%mod;
}
ll S2(ll x)
{
x%=mod;
return x*(x+1)%mod%(2*x+1)%mod*inv6%mod;
}
ll cal(ll x)
{
if(x<=N)return Sphi[x];
if(mp[x])return mp[x];
ll res=S(x)%mod;
res=res*res%mod;
for(ll l=2,r;l<=x;l=r+1)
{
r=x/(x/l);
ll tem=((S2(r)-S2(l-1))%mod+mod)%mod;
res=(res-cal(x/l)*tem%mod+mod)%mod;
}
res=(res+mod)%mod;
mp[x]=res;
return res;
}
int main()
{
scanf("%lld%lld",&mod,&n);
N=min(N,n);
get();
inv2=qpow(2,mod-2);
inv6=qpow(6,mod-2);
for(ll l=1,r;l<=n;l=r+1)
{
r=n/(n/l);
ll tem=S(n/l);
tem=tem*tem%mod;
ans=(ans+tem*(cal(r)-cal(l-1)+mod)%mod+mod)%mod;
}
printf("%lld",(ans+mod)%mod);
return 0;
}