#include using ll = long long; using namespace std; #define rep(i, n) for (ll i=0; i<(n); i++) // https://kenkoooo.hatenablog.com/entry/2016/11/30/163533 using lll = __int128_t; std::istream &operator>>(std::istream &src, lll &value) { ll x; src >> x; value = x; return src; } std::ostream &operator<<(std::ostream &dest, lll value) { std::ostream::sentry s(dest); if (s) { __uint128_t tmp = value < 0 ? -value : value; char buffer[128]; char *d = std::end(buffer); do { --d; *d = "0123456789"[tmp % 10]; tmp /= 10; } while (tmp != 0); if (value < 0) { --d; *d = '-'; } int len = std::end(buffer) - d; if (dest.rdbuf()->sputn(d, len) != len) { dest.setstate(std::ios_base::badbit); } } return dest; } lll INF = ((lll)(1) << 125); lll parse(string &s) { lll ret = 0; for (int i = 0; i < s.length(); i++) if ('0' <= s[i] && s[i] <= '9') ret = 10 * ret + s[i] - '0'; return ret; } void solve() { lll n,m,a,b,c,d; cin >> n >> m >> a >> b >> c >> d; auto eval = [&] (lll n, lll m, lll a, lll b, lll c, lll d, lll x) -> lll {return a * x + b * ((c * x + d) / m);}; auto f = [&] (auto self, lll n, lll m, lll a, lll b, lll c, lll d) -> lll { if (n <= 0) return -INF; if (a >= 0 && b >= 0) { return eval(n, m, a, b, c, d, n-1); } if (a <= 0 && b <= 0) { return eval(n, m, a, b, c, d, 0); } if (m == 1) { if (a + b * c >= 0) return a * (n-1) + b * c * (n-1) + b * d; return b * d; } if (c >= m) { lll c1 = c / m; lll c2 = c % m; return self(self, n, m, a + b * c1, b, c2, d); } if (d >= m) { lll d1 = d / m; lll d2 = d % m; return self(self, n, m, a, b, c, d2) + b * d1; } if (a < 0) { lll k = (c * (n-1) + d) / m; lll ans = self(self, k, c, b, a, m, m - d + c - 1) + b; return max(ans, eval(n, m, a, b, c, d, 0)); } else { lll k = (c * (n-1) + d) / m; lll ans = self(self, k, c, b, a, m, m - d - 1); return max(ans, eval(n, m, a, b, c, d, n-1)); } }; lll ans = f(f, n, m, a, b, c, d); cout << ans << '\n'; } int main() { ll t; cin >> t; rep(i, t) solve(); }