//大数取模
//题意 输入大数K 和小数L, 判断是否存在小于L的质数能整除K
//先写了1000进制的发现比较慢,然后改成10^11进制,快了许多
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=1000099;
const long long T=1e11;
const int W=11; //转化为10^11进制
bool prime[maxn+1];
long long p[maxn], sum, num[40], len;
char s[105];
void makeprime(){ //打素数表
memset(prime, true, sizeof(prime));
long long i, j;
prime[1]=0;
for(i=2; i<=int(sqrt(double(maxn))); i++){
if(prime[i]){
j=i*2;
while(j<maxn){
prime[j]=0;
j+=i;
}
}
}
sum=0;
for(i=2; i<=maxn; i++)
if(prime[i])p[sum++]=i;
}
long long change(){ //进制转换,转成10^W进制
long long i, j=1, k;
num[0]=0;
for(i=0; i<len%W; i++)
num[0]=num[0]*10+(s[i]-'0');
for(i=len%W; i<len; i+=W){
num[j]=0;
for(k=i; k<i+W; k++)
num[j]=num[j]*10+(s[k]-'0');
j++;
//num[j++]=(s[i]-'0')*100+(s[i+1]-'0')*10+(s[i+2]-'0');
}
return j;
}
int main(){
long long l, i, j, ans, flag,lenth;
makeprime();
while(scanf("%s%lld", s, &l)&&l){
flag=0;
len=strlen(s);
lenth=change();
for(i=0; p[i]<l; i++){
ans=0;
for(j=0; j<lenth; j++){
ans=((ans*T)%p[i]+num[j]%p[i])%p[i];
}
if(ans==0){flag=1;break;}
}
if(flag)printf("BAD %lld\n", p[i]);
else printf("GOOD\n");
}
return 0;
}