Problem p03437 (C++)

Buggy submission (status: Time Limit Exceeded):
//------------------------------>> tsukasa_diary's template
//<<------------------------------//
#include <bits/stdc++.h>
using namespace std;

#define for_(i, a, b) for (int i = (a); i < (b); ++i)
#define for_rev(i, a, b) for (int i = (a); i >= (b); --i)
#define allof(a) (a).begin(), (a).end()
#define minit(a, b) memset(a, b, sizeof(a))

using lint = long long;
using pii = pair<int, int>;

template <typename T> using Vec = vector<T>;

template <typename T> bool in_range(T x, T lb, T ub) {
  return lb <= x && x < ub;
}
template <typename T> bool in_range(T x, T y, T lb, T ub) {
  return in_range(x, lb, ub) && in_range(y, lb, ub);
}

template <typename T> void modAdd(T &a, T b, T mod) { a = (a + b + mod) % mod; }
template <typename T> void modMul(T &a, T b, T mod) { a = (a * b) % mod; }
template <typename T> void minUpdate(T &a, T b) { a = min(a, b); }
template <typename T> void maxUpdate(T &a, T b) { a = max(a, b); }

int bitCount(int x) { return __builtin_popcount(x); }
int bitCount(lint x) { return __builtin_popcountll(x); }

const int dx[4] = {0, 1, 0, -1}, dy[4] = {-1, 0, 1, 0};
const int Dx[8] = {0, 1, 1, 1, 0, -1, -1, -1},
          Dy[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
const double EPS = 1e-9;
const double PI = acos(-1);

//--------------8---------------->> coding space
//<<-----------------8-------------//

int main() {
  lint X, Y;
  cin >> X >> Y;

  if (X % Y == 0) {
    puts("-1");
  } else {
    lint g = __gcd(X, Y);
    lint a = X / g;
    while (X < Y)
      X *= a;
    cout << X << endl;
  }
}
//--------------8---------------->> coding space
//<<-----------------8-------------//


Fixed submission:
//------------------------------>> tsukasa_diary's template
//<<------------------------------//
#include <bits/stdc++.h>
using namespace std;

#define for_(i, a, b) for (int i = (a); i < (b); ++i)
#define for_rev(i, a, b) for (int i = (a); i >= (b); --i)
#define allof(a) (a).begin(), (a).end()
#define minit(a, b) memset(a, b, sizeof(a))

using lint = long long;
using pii = pair<int, int>;

template <typename T> using Vec = vector<T>;

template <typename T> bool in_range(T x, T lb, T ub) {
  return lb <= x && x < ub;
}
template <typename T> bool in_range(T x, T y, T lb, T ub) {
  return in_range(x, lb, ub) && in_range(y, lb, ub);
}

template <typename T> void modAdd(T &a, T b, T mod) { a = (a + b + mod) % mod; }
template <typename T> void modMul(T &a, T b, T mod) { a = (a * b) % mod; }
template <typename T> void minUpdate(T &a, T b) { a = min(a, b); }
template <typename T> void maxUpdate(T &a, T b) { a = max(a, b); }

int bitCount(int x) { return __builtin_popcount(x); }
int bitCount(lint x) { return __builtin_popcountll(x); }

const int dx[4] = {0, 1, 0, -1}, dy[4] = {-1, 0, 1, 0};
const int Dx[8] = {0, 1, 1, 1, 0, -1, -1, -1},
          Dy[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
const double EPS = 1e-9;
const double PI = acos(-1);

//--------------8---------------->> coding space
//<<-----------------8-------------//

int main() {
  lint X, Y;
  cin >> X >> Y;

  if (X % Y == 0) {
    puts("-1");
  } else {
    lint g = __gcd(X, Y);
    if (g == X) {
      lint k = Y / X;
      cout << (k + 1) * X << endl;
    } else {
      lint a = X / g;
      while (X < Y)
        X *= a;
      cout << X << endl;
    }
  }
}
//--------------8---------------->> coding space
//<<-----------------8-------------//