c++在set中用upper_bound函数 和 迭代器++ 值不同

问题遇到的现象和发生背景

做了一道有关set的题 set不是自动去重复排序吗 这里我一开始想的是 直接把指针++ 这样就可以找到 第一个比前一个元素大的那个元素了,和upper_bound不是一样的效果吗?但是,用指针和upper_bound的值不同

问题相关代码,请勿粘贴截图
#include<set>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long LL;
set<LL> s;
set<LL> ::iterator it=s.begin();
const LL mod=59084709587505;
int main(){
    int a[]={3,5,7};
    LL t=1;
    while(1){
        for(int i=0;i<3;i++){
            LL tt=t*a[i];
            if(tt<=mod){
                s.insert(tt);
            }
        }
        
        t=*(s.upper_bound(t));
        //t=*it;
        cout<<t<<" ";
        //it++;
        if(t>=mod){
            break;
        }
    }


    
    

    
    
    return 0;
}

运行结果及报错内容

代码中我注释掉的就是原来的方案 但是这两种写法答案 不同。用upper_bound可以得到正确输出,如:3 5 7 9.
但是 用*it,输出的是:3 7 9 15 21 27 35 45 49 63
中间的五丢了,想不通为什么?

我的解答思路和尝试过的方法
我想要达到的结果

提醒:STL是开源的。
单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。

第一次循环 insert 3 5 7 那么按照我的逻辑 set中存放的就是 3 5 7 啊,为什么it++ 以后输出的是7 呢