#include<bits/stdc++.h>
/* //--
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp> // oset.order_of_key(a); --> # of e < a
using namespace __gnu_pbds;   // *(oset.find_by_order(a)); --> (a-1)th smallest e  
#define orderedSet tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>
//-- */  
#define IOS ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define deb(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
#define vi vector<int>
#define pb push_back 
#define fo(i,n) for(int i=0;i<n;i++)
#define fo1(i,a,b) for(int i=a;i<=b;i++)
#define fo2(i,a,b) for(int i=a;i<b;i++)
#define fo3(i,s) for(int i=0;s[i];i++)
#define fo4(x,s) for(auto x: s)
#define all(v) v.begin(),v.end()
using namespace std;
typedef long long int ll;

// bool isPrime(ll n)
// {
//     fo1(i,2,sqrt(n))
//         if(n%i==0)return false;
//     return true;
// }
// ll greatestDiv(ll n)
// {
//     for(ll i=2;i<=sqrt(n);i++)
//     {
//         if(n%i==0){
//             //cout<< deb(i) deb(n/i)<<endl;
//             return min(i,n/i);
//         }
//     }
//     return 0;
// }
void test_case()
{
    ll n,ans=0;
    cin>>n;
    if(n&1){
        if(n==1)ans=0;
        else if(n==3)ans=2; 
        else ans =3;
    }
    else{
        if(n==2)ans=1;
        else ans=2;
    }
    cout<<ans<<endl;
}
signed main(void)
{
    IOS
    int t=1;
    cin>>t;
    while(t--)
    {
        test_case();
    }
    return 0;
}
