The default values for mtry (the number of features considered at each split) are there as guidance and a starting point, but they will not necessarily provide the best performance on unseen data.
As you say in the R randomForest package the mtry default for regression is p/3, but if we look at the scikit-learn implementation of RandomForestRegressor we see that the default is p, with other common choices given as sqrt(p) or log2(p), so these defaults are not even necessarily consistent across different implementations of the same algorithm.
The tuneRF() function you have tried attempts to find this best mtry by starting at a given mtry and computes the out-of-bag estimate of error and then iterates to the next mtry, either going up or down by a given step as set in the default or by the user. If the next mtry doesn't improve the error by a specified amount the search ends. The fact that this function has chosen 22 over the default should not concern you, this has been chosen on the basis that this mtry reduces the error on the out of bag samples, which serve as a good approximation of test error. Although if you have started this process at the default you may have missed out more optimal values at the lower range.
Regarding the number of trees, this is also a parameter that can be altered. To attempt to find the optimal mtry and number of trees for your given problem you should really try tuning the model with different parameter combinations over the whole range, testing via cross validation to determine the parameters for best performance. As you have already said you are using R see this walkthrough of this process.