uses math;
const
zs:array[1..8]of longint=(2,3,5,7,11,13,17,19);
var
i,ii,j,jj,k,l,fl,n:longint;
a:array[0..501]of int64;
b:array[0..8]of int64;
dp:array[0..7000]of int64;
dp2:array[0..2,0..7000]of int64;
ans,tj,mo:int64;
begin
readln(n,mo);
b[0]:=1; for i:=1 to 8 do b[i]:=b[i-1]*3;
for i:=0 to b[8]-1 do dp[i]:=1;
for i:=2 to n do
if a[i]=0 then
begin
j:=i*2;
while j<=n do
begin
if i>20 then a[j]:=2 else a[j]:=max(a[j],1);
j:=j+i;
end;
if i>20 then
begin
for j:=0 to b[8]-1 do
begin
dp2[0,j]:=dp[j]; dp2[1,j]:=0; dp2[2,j]:=0;
end;
ii:=i; k:=1;
while ii<=n do
begin
for jj:=1 to 2 do
for j:=b[8]-1 downto 0 do
if dp2[jj,j]>0 then
begin
tj:=j; fl:=0;
for l:=1 to 8 do
if k mod zs[l]=0 then
begin
if (tj div b[l-1])mod 3=3-jj then
begin fl:=1; break; end else
tj:=tj+(jj-(tj div b[l-1])mod 3)*b[l-1];
end;
if fl=0 then dp2[jj,tj]:=(dp2[jj,tj]+dp2[jj,j])mod mo;
end;
for j:=b[8]-1 downto 0 do
begin
for jj:=1 to 2 do
begin
tj:=j; fl:=0;
for l:=1 to 8 do
if k mod zs[l]=0 then
begin
if (tj div b[l-1])mod 3=3-jj then
begin fl:=1; break; end else
tj:=tj+(jj-(tj div b[l-1])mod 3)*b[l-1];
end;
if fl=0 then dp2[jj,tj]:=(dp2[jj,tj]+dp2[0,j])mod mo;
end;
end;
ii:=ii+i; inc(k);
end;
for j:=0 to b[8]-1 do dp[j]:=(dp[j]+dp2[1,j]+dp2[2,j])mod mo;
end;
end else
if a[i]=1 then
begin
for j:=b[8]-1 downto 0 do
begin
for jj:=1 to 2 do
begin
tj:=j; fl:=0;
for l:=1 to 8 do
if i mod zs[l]=0 then
begin
if (tj div b[l-1])mod 3=3-jj then
begin fl:=1; break; end else
tj:=tj+(jj-(tj div b[l-1])mod 3)*b[l-1];
end;
if fl=0 then dp[tj]:=(dp[tj]+dp[j])mod mo;
end;
end;
end;
for i:=0 to b[8]-1 do
begin
fl:=0;
for l:=1 to 8 do
if(zs[l]>n)and((i div b[l-1])mod 3<>0)then
begin fl:=1; break; end;
if fl=0 then ans:=(ans+dp[i])mod mo;
end;
writeln(ans);
end.