#include<vector>
#include<map>
#include<climits>
#include<set>
#include<queue>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cctype>
#include<string>
#include<bitset>
#include<cstring>
#include<list>
using namespace std;
typedef vector<int>VI;
typedef vector<VI>VVI;
typedef vector<string>VS;
typedef pair<int,int>PII;
typedef long long LL;
typedef pair<LL,LL>PLL;
#define ALL(a) (a).begin(),(a).end()
#define RALL(a) (a).rbegin(),(a).rend()
#define PB push_back
#define EACH(i,c) for(typeof((c).begin())i=(c).begin();i!=(c).end();i++)
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) FOR(i,0,n)
#define F first
#define S second

LL gcd(LL a,LL b){
    if(a<b)swap(a,b);
    return b?gcd(b,a%b):a;
}
LL lcm(LL a,LL b){
    return a/gcd(a,b)*b;
}
int main(){
    int a[3],m[3];
    while(true){
        bool endFlag=true;
        REP(i,3){
            cin>>a[i]>>m[i];
            if(a[i]||m[i])endFlag=false;
        }
        if(endFlag)break;

        LL c[3];
        REP(i,3){
            int x=1;
            REP(j,1000000000){
                x=(a[i]*x)%m[i];
                if(x==1){
                    c[i]=j+1;
                    break;
                }
            }
        }
        LL ans=lcm(lcm(c[0],c[1]),c[2]);
        cout<<ans<<endl;
    }
    return 0;
}