N,M=map(int,input().split()) if M<=100: F=[1,1] for i in range(M+3): F.append(F[-1]+F[-2]) MAX=F[M-1] ANS=0 for i in range(M+3): now=0 for j in range(i,M+3): now+=F[j] if now%N==0 and now<=MAX: #print(i,j) ANS+=1 print(ANS) exit() if N!=1: F=[0,1] while True: F.append((F[-1]+F[-2])%N) if F[-2]==0 and F[-1]==1: break F=F[1:-1] else: F=[0] LIST=[[0]] LIST=[[] for i in range(N)] for i in range(len(F)): LIST[F[i]].append(i) # 和がF[M-1]以下 # F[x]~F[y] # = F[y+2] - F[x+1] # y=M-1のとき # x=M-1のときのみOK # y=M-2のとき、 # x=M-3のとき、F[M] - F[M-2] = F[M-1]でOK # なので、x=y-1かy # y=M-3のとき、何でもOK # y+1を全探索する。 # y<=M-3のとき、y+2<=M-1 # x<=M-3なので、x+1<=M-2 # なので、[0,M-1]で正しいものを計算し、例外として、y=M-1,M-2のときを調べる。 ANS=0 rep=(M-1)//len(F) for i in range(N): L=LIST[i] ko=rep*len(L) for j in range(len(L)): if L[j]+rep*len(F)<=M-1: ko+=1 else: break ANS+=ko*(ko-1)//2 if L and L[0]==0: ANS-=ko-1 if len(L)>=2 and L[0]==0 and L[1]==1: ANS-=1 #print(ANS) y=(M+1)%len(F) x=M%len(F) for i in range(N): if x in LIST[i] and y in LIST[i]: ANS+=1 y=M%len(F) for i in range(N): if y in LIST[i]: if y%len(F) in LIST[i]: ANS+=1 if (y+1)%len(F) in LIST[i]: ANS+=1 print(ANS)