#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#define NMAX 1000UL
#define STRTO strtoull
#define NMAX 1000100UL
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;
}
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();
l=strlen(sc);
ld=nrcifre(d);
if(ld>l) printf("%llu",d);
else
if(l<=18){
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=18;
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=18-lr+1;
}
lr=nrcifre(r);
p=finish-ld+1;
strcpy(x,p);
n=STRTO(x,&end,10);
//printf("%llu %llu %d\n",r,n,lr);
if(r)
{
n=n+d;
n=n-r;
sprintf(x,"%llu",n);
carry=0;
if(nrcifre(n)>lr){
strcpy(xt,x+1);
strcpy(p,xt);
ncc=strlen(p);
carry=*x-48;p--;ncc++;
while(carry){
pc=*p-48;
pc=pc+carry;
if(pc>9)
{
if(ncc==l+1) *p=0;
pc=pc%10;carry=1;*p=pc+48;p--;ncc++;
if(ncc==l+1) *p='0';
}
else {*p=pc+48;carry=0;}
}
if(ncc>l) p=sc-1;
else p=sc;
}
else strcpy(p,x);
}
printf("%s",p);
}
return 0;
}
/*for(i=1;i<=2000000000;i=10*i)
{ld=nrcifre(i);
printf("%llu %d\n",i,ld);
} */