def gcd(x,y):

    while y>0:

        x,y = y,x%y

    return x

N,M = list(map(int,input().split()))

S = input().strip()

T = input().strip()

a = gcd(N,M)

L = (N//a)*(M//a)*a

ks = L//N

kt = L//M

flag = 0

if S[0]!=T[0]:

    flag = 1

else:

    b = gcd(ks,kt)

    kl = (ks//b)*(kt//b)*b

    for i in range(min(N,M)):

        if (kl//ks)*i<N and (kl//kt)*i<M and S[(kl//ks)*i]!=T[(kl//kt)*i]:

            flag = 1

            break

if flag==1:

    print((-1))

else:

    print(L)
def gcd(x,y):

    while y>0:

        x,y = y,x%y

    return x

N,M = list(map(int,input().split()))

S = input().strip()

T = input().strip()

a = gcd(N,M)

K = (N//a)*M

t = (N//a)*(M//a)

flag = 0

k = 0

while (k*t)//(K//N)<N and (k*t)//(K//M)<M:

    if S[(k*t)//(K//N)]!=T[(k*t)//(K//M)]:

        flag = 1

        break

    k += 1

if flag==0:

    print(K)

else:

    print((-1))
def gcd(x, y):
    while y > 0:
        x, y = y, x % y
    return x


N, M = list(map(int, input().split()))
S = input().strip()
T = input().strip()
a = gcd(N, M)
L = (N // a) * (M // a) * a
ks = L // N
kt = L // M
flag = 0
if S[0] != T[0]:
    flag = 1
else:
    b = gcd(ks, kt)
    kl = (ks // b) * (kt // b) * b
    for i in range(min(N, M)):
        if (
            (kl // ks) * i < N
            and (kl // kt) * i < M
            and S[(kl // ks) * i] != T[(kl // kt) * i]
        ):
            flag = 1
            break
if flag == 1:
    print((-1))
else:
    print(L)

def gcd(x, y):
    while y > 0:
        x, y = y, x % y
    return x


N, M = list(map(int, input().split()))
S = input().strip()
T = input().strip()
a = gcd(N, M)
K = (N // a) * M
t = (N // a) * (M // a)
flag = 0
k = 0
while (k * t) // (K // N) < N and (k * t) // (K // M) < M:
    if S[(k * t) // (K // N)] != T[(k * t) // (K // M)]:
        flag = 1
        break
    k += 1
if flag == 0:
    print(K)
else:
    print((-1))

-L = (N // a) * (M // a) * a -ks = L // N -kt = L // M +K = (N // a) * M +t = (N // a) * (M // a) -if S[0] != T[0]: -    flag = 1 +k = 0 +while (k * t) // (K // N) < N and (k * t) // (K // M) < M: +    if S[(k * t) // (K // N)] != T[(k * t) // (K // M)]: +        flag = 1 +        break +    k += 1 +if flag == 0: +    print(K) -    b = gcd(ks, kt) -    kl = (ks // b) * (kt // b) * b -    for i in range(min(N, M)): -        if ( -            (kl // ks) * i < N -            and (kl // kt) * i < M -            and S[(kl // ks) * i] != T[(kl // kt) * i] -        ): -            flag = 1 -            break -if flag == 1: -else: -    print(L)