#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#define NMAX 1000UL
#define STRTO strtoull
#define NMAX 1000100UL
#define LMAX 18
unsigned long long v10[21]={0};
void p_zece()
{
int i;
unsigned long long p10=1;
for(i=0;i<21;i++){
v10[i]=p10;
p10*=10;
}
}
int nrcifre(unsigned long long x)
{
int i;
for(i=1;i<20;i++){
if(x<v10[i]) break;
}
return i;
}
char *suma(char *p, char *q)
{
char *t,*z;
int lp,lq,i,carry,k,j;
lp=strlen(p);
lq=strlen(q);
if(lp<lq) {t=p;p=q;q=t;}
lp=strlen(p);
lq=strlen(q);
carry=0;k=0;
z=p+lp-1;
for(j=lq-1;j>=0;j--){
*z=*(z)-48+*(q+lq-k-1)+carry;
if(*z>48+9) {carry=1;*z-=10;}
else carry=0;
k++;
z--;
}
while(carry&&lp-k>0){
*z=*(z)+carry;
if(*z>48+9) {carry=1;*z-=10;}
else carry=0;
k++;
z--;
}
if(carry){p--;*p='1';}
return p;
}
int main()
{
unsigned long long n,d,m,c,r,l,i,ncc;
char s[NMAX+1],x[31],xt[31],*end,*p,*finish,*sc;
int ld,lung,lr,carry,pc;
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
sc=s+50;
scanf("%s",sc);
scanf("%llu",&d);
p_zece();
//i=1000;
/*
while(i<2001)
{
printf("%-10llu",i);
ultoa(i,sc,10); */
l=strlen(sc);
ld=nrcifre(d);
if(ld>l) printf("%llu",d);
else
if(l<=LMAX){
n=STRTO(sc,&end,10);
c=n/d;r=n%d;
if(r) c++;
m=c*d;
printf("%llu",m);
}
else
{
finish=sc+l;
p=sc;
lung=LMAX;
r=0;
while(p<finish){
strncpy(x,p,lung);
if(lung>finish-p) lung=finish-p;
x[lung]='\0';
p+=lung;
n=STRTO(x,&end,10);
r*=v10[lung];
n+=r;
r=n%d;
lr=nrcifre(r);
lung=LMAX-lr+1;
}
n=d-r;
// printf("%llu %llu %d ",r,n,lr);
if(r)
{
sprintf(x,"%llu",n);
p=suma(sc,x);
}
else p=sc;
printf("%s",p);
}
/*i++;
} */
return 0;
}
/*for(i=1;i<=2000000000;i=10*i)
{ld=nrcifre(i);
printf("%llu %d\n",i,ld);
} */