#include using namespace std; using ll = long long; using ld = long double; template using v = vector; template using vv = vector>; template using vvv = vector>>; #define rep(...) overload_rep(__VA_ARGS__, rep3, rep2)(__VA_ARGS__) #define overload_rep(_1, _2, _3, name, ...) name #define rep2(i, n) for (int i = 0; i < (int)(n); i++) #define rep3(i, a, b) for (int i = (int)(a); i < (int)(b); i++) #define rrep(i,n) for(int i=(int)(n)-1;i>=0;i--) #define all(x) (x).begin(), (x).end() #define vi vector #define vll vector #define vvi vector> #define vvll vector> #define vvvi vector>> #define pii pair #define pll pair #define el '\n' #define sp ' ' #define Yes cout<<"Yes"< bool chmin(T &a, const T &b){ if (b < a){ a = b; return true; } return false; } template bool chmax(T &a, const T &b){ if (b > a){ a = b; return true; } return false; } using mtup = tuple; const int INF = 1e9; const long long LINF = 1e18; const int mod = 998244353; // const int mod = 1e9 + 7; ll extgcd(ll a, ll b, ll &x, ll &y) { if (b == 0) { x = 1; y = 0; return a; } ll x1, y1; ll g = extgcd(b, a % b, x1, y1); x = y1; y = x1 - (a / b) * y1; return g; } ll mod_inv(ll a, ll mod) { ll x, y; extgcd(a, mod, x, y); x %= mod; if (x < 0) x += mod; return x; } ll CRT(vi& a, vi&m){ ll M = 1, res = 0; for(auto i: m) M *= i; for(int i = 0; i < a.size(); ++i){ ll Mi = M / m[i]; ll xi = mod_inv(Mi, m[i]); ll ei = Mi * xi % M; res = (res + a[i] * ei % M) % M; } return res; } vi f(vi a){ int n = 2; int m = a.size(); vi res = a; rep(i, n - 1){ rep(j, m){ res[j] = a[res[j] - 1]; } a = res; } return res; } int main(){ //高速化 //ここから vi a(2), mod(2); cin >> mod[0] >> mod[1]; cin >> a[0] >> a[1]; cout << CRT(a, mod) << el; } /* cppt cppt_ge seg, bit, uf g++ main.cpp -O2 -std=c++17 ./a.out */