#include <stdio.h>
#include <string.h>
#define fin "next.in"
#define fout "next.out"
#define NMAX 1000002
#define DMAX 18
int N[NMAX],D[DMAX];
void read(int A[])
{
char c;
while ( scanf("%c",&c)!=EOF & c>='0' & c<='9'& c!='\n' )
{
A[++A[0]] = c - '0';
}
}
void write(int A[])
{
freopen(fout,"w",stdout);
for ( int i = A[0] ; i ; --i)
printf("%d",A[i]);
printf("\n");
fclose(stdout);
}
void swap(int &x,int &y)
{
int aux = x;
x = y;
y = aux;
}
void reverse(int A[])
{
for ( int i = 1 ; i <= A[0]/2 ; ++i)
swap(A[i],A[A[0] - i + 1]);
}
void readData()
{
freopen(fin,"r",stdin);
read(N);
reverse(N);
read(D);
reverse(D);
fclose(stdin);
}
void lshift(int A[],int x)
{
memmove(&A[1+x],&A[1],sizeof (int) * A[0]);
memset(&A[1],0,sizeof(int) * x);
A[0] += x;
}
int sgn(int A[], int B[])
{
int i;
if(A[0]>B[0]) return 1;
if(A[0]<B[0]) return -1;
for (i = A[0] ; i>1 && A[i]==B[i]; --i);
return A[i] < B[i] ? -1:A[i] == B[i] ? 0 : 1;
}
void sub(int A[],int B[],int C[])
{
C[0] = A[0];
for ( int i = 1 , t = 0 ; i<= A[0] ; ++i)
C[i] += ( t = (C[i] = A[i] - B[i] - t) < 0 ) * 10;
while(!C[C[0]] & C[0]>1) --C[0];
}
void add(int A[] , int B[] ,int C[])
{
int i,t;
for ( i = 1 , t = 0 ; i<=A[0] || i<=B[0] || t ; ++i,t/=10)
C[i] = (t += A[i] + B[i]) % 10;
C[0] = i - 1;
}
void mod(int X[], int Y[], int R[]) // R = X % Y
{
int tmp[DMAX];
for ( int i = X[0] ; i ; --i )
{
if(R[1] | R[0]>1) lshift(R,1);
R[1] = X[i];
while(sgn(R,Y) != -1)
{
memset(tmp,0,sizeof tmp);
sub(R,Y,tmp);
memmove(R,tmp,sizeof tmp);
}
}
}
void solve()
{
int C1[DMAX],C2[DMAX];
C1[0] = 1; memset(C1+1,0,sizeof (int) * (DMAX-1) );
C2[0] = 1; memset(C2+1,0,sizeof (int) * (DMAX-1) );
mod(N,D,C1);
if(!C1[1]) write(N);
else
{
sub(D,C1,C2);
C1[0] = 1; memset(C1+1,0,sizeof (int) * (DMAX-1) );
add(N,C2,C1);
write(C1);
}
}
int main()
{
readData();
solve();
return 0;
}